900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 快速排序算法C语言实现

快速排序算法C语言实现

时间:2019-09-08 09:46:57

相关推荐

快速排序算法C语言实现

快速排序算法C语言实现

在任何程序中,数组的排序都是极为重要的内容,我们需要按照业务需要对大量的数据进行排序,因此排序的速度或者说效率就显得极为重要了,因此选择一个效率较高的算法可以大大提升程序的性能。

如今的算法界,排序算法比较多,包括:冒泡排序,堆排序,选择排序,插入排序,交换排序等,而今天所说的快速排序(QuickSort)就是交换排序的一种,它具有快速,高效的特性而被经常使用,但它的时间复杂度也是级不稳定的,最好的情况下是O( nlogn ),最坏的情况下是O( n^2 )。

其排序的原理在于通过一趟排序,将待排序的记录分成独立的两部分,其中一部分的数据始终大于另一部分数据的值,然后在分别利用递归对这两部分进行排序,以达到整个序列的有序。

废话不多说,直接看C程序:

1.首先需要定义快速排序的递归式:

void QuickSort(ElemType arr[],int start,int end){if(start<end){int key=(start+end)/2;key=Sort(arr,start,end,key);QuickSort(arr,start,key-1);QuickSort(arr,key+1,end);}}

从代码中我们可以看出,首先需要确定一个关键点,这个点可以任意设置,一般设置成中间位置,然后先对序列进行一趟排序后,再利用递归对大于关键点的部分和小于关键点的部分进行排序。

2.子排序代码:

int Sort(ElemType arr[],int low,int high,int key){findmin(arr,&low,&high,&key);return key;}void findmin(ElemType arr[],int *low,int *high,int *key){if(low<high){int pos=-1;for(int i=*high;i>=*low;i--){if(arr[i]<=arr[*key]){pos=i;break;}}if(pos!=-1){*high=pos;Exchange(&arr[*high],&arr[*key]);*key=pos;int value=*high;value--;*high=value;findmax(arr,low,high,key);}}}void findmax(ElemType arr[],int *low,int *high,int *key){if(low<high){int pos=-1;for(int i=*low;i<=*high;i++){if(arr[i]>=arr[*key]){pos=i;break;}}if(pos!=-1){*low=pos;Exchange(&arr[*low],&arr[*key]);*key=pos;int value=*low;value++;*low=value;findmin(arr,low,high,key);}}}

一趟排序的算法为:

(1)设置low和high来表示序列的范围,从high开始向前寻找第一个小于关键点值的位置,然后与关键点进行交换.

(2)从low开始向后寻找第一个大于关键点值的位置,然后与关键点进行交换.

(3).。。。。。。。。。。一直这样递归下去知道low=high

3.进行程序的测试

int main(){ElemType arr[]={11,26,2,5,158,176,2,4,6};int len=sizeof(arr)/sizeof(ElemType);print(arr,len);QuickSort(arr,0,len-1);printf("Quick Sort ....\n");print(arr,len);return 0;}

最后输出结果为:

代码Github地址:/xiaoqinzhao/QuickSort

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。