快速排序算法的C语言实现

Posted 小喽啰A

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法的C语言实现相关的知识,希望对你有一定的参考价值。

        算法特别特别重要,至少我现在是这么认为。我觉得真正懂算法的程序员才能算得上是一个合格程序员,仅仅熟练使用某个程序设计语言的程序员只能算是码农。为了当一个合格的程序员,我要开始学习算法了。哈哈,自己加油。

        今天要记录自己刚刚研究的快速排序算法。

        快排算法也属于分治法。其核心思想是,将一个数组根据规则拆分成两个数组,然后递归排序两个数组;使用快速排序算法的好处就是节省内存空间,直接在原数组上面排序就可以了,不需要使用额外的内存空间。


快速排序算法的步骤如下,

1、选定数组第一个元素为根元素,将小于根元素的数放到根元素的左侧,大于或者等于根元素的数放到右侧;

2、将左右两侧的子数组分别递归调用步骤1;


伪代码:

int quickSort(array, start, end)//快速排序函数,返回值的是个标记。小于0代表不需要继续排序了;

    if(start >= end)

          结束;

    执行步骤1,定位出根节点的位置为i;

    quickSort(array, start, i-1);

    quickSort(array, i+1, end);


c语言实现代码如下

#include <stdio.h>

int quick_sort(int *, int , int);

int main(int argc, char **argv)

	int arr[] = 6, 10, 13, 5, 8, 3, 2, 11;
	
	int i, j;
	int len = sizeof(arr)/sizeof(int) ;
	if( quick_sort(arr, 0, len - 1) == -1)
		printf("sort error!\\n");
	 else 
		for(i=0; i<len; i++)
			printf("%d\\t", *(arr+i));
		printf("\\n");
	



int quick_sort(int *array, int start_index, int end_index)

	printf("start: %d, end: %d;\\n", start_index, end_index);
	if( start_index >= end_index )
		return 0;
	
	int temp;
	int i, j;
	int x = array[ start_index ];
	i = start_index;

	for(j = start_index + 1; j <= end_index; j++ ) 
		if( array[j] < x )
			i += 1;
			temp = array[j];
			array[j] = array[i];
			array[i] = temp;  
		
	

	temp = array[i];
	array[i] = array[start_index];
	array[start_index] = temp;

	quick_sort(array, start_index, i-1);
	quick_sort(array, i+1, end_index);

	return 0;

突然想到这个写法有点问题,回去再重写这个算法函数。下班鸟。。。。

以上是关于快速排序算法的C语言实现的主要内容,如果未能解决你的问题,请参考以下文章

C语言,快速排序算法

数据结构之八大排序算法(C语言实现)

C语言试题174之实现快速排序算法

C语言试题174之实现快速排序算法

快速排序算法的C语言实现

C语言快速排序代码