首页 >> 宝藏问答 >

快速排序代码c语言(快速排序)

2023-12-03 20:40:56

问题描述:

快速排序代码c语言(快速排序),有没有大佬愿意带带我?求帮忙!

最佳答案

推荐答案

2023-12-03 20:40:56

你们好,最近小时发现有诸多的小伙伴们对于快速排序代码c语言,快速排序这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、快速排序作为和冒泡排序相同类型的排序(同为交换类排序),之所以能够被人们所熟知,是因为它解决了冒泡排序只用来对相邻两个元素进行比较,因此在互换两个相邻元素时只能消除一个逆序,而快速排序是通过两个不相邻元素的交换,来消除待排序记录中的多个逆序。即快速排序中的一趟交换可以消除多个逆序。具体思想:从待排序记录中选取一个记录(通常选取第一个记录,当然也可采用随即划分的方式,这样能大大提高快速排序的执行效率,如我们所熟知的在O(n)的时间复杂度内找出前k元的算法),将其关键字记为K1,然后将其余关键字小于K1的记录移到前面,而大于关键字K1的移到后面,一趟快速排序之后,将待排序序列划分为两个子表,最后将关键字K1插到这两个子表的分界线的位置。具体实现就是用三层while循环,最外层的while循环控制该趟快速是否进行,而内层的两个while循环一个用来从左到右扫描大于该趟基准记录关键字的元素,一个用来从右到左扫描小于该趟基准记录的关键字的元素,可以用两个指针low和high指向当前从左到右和从右到左扫描的当前记录的关键字,找到一个就将其交换。以上是一趟快速排序的思想,对上述划分后的子表重复上述过程,直至划分后的子表的长度不超过1为止。即为快速排序的思想,从定义可知快速排序是一个递归排序。具体代码如下:

2、#include<iostream>

3、using namespace std;

4、const int len=7;

5、int qk(int a[],int low,int high)//注意快速排序函数的参数,因为每一趟快速排序的作用是要将数组分割为两个部分,前面一部分不大于K,后面一部分不小于K,然后在 //对前一部分和后一部分继续进行快速排序,所以,qk的第二个参数与第三个参数应为low与high

6、{

7、 int x=a[low];//选取第一个元素作为基准记录

8、 while(low<high)

9、 {

10、 while(low<high&&a[high]>=x)

11、 high--;

12、 if(low<high)

13、 {

14、 a[low]=a[high];

15、 low++;

16、 }

17、 while(low<high&&a[low]<=x)

18、 low++;

19、 if(low<high)

20、 {

21、 a[high]=a[low];

22、 high--;

23、 }

24、 }

25、 a[low]=x;

26、 return low;

27、}

28、void qsort(int a[],int low,int high)

29、{

30、 if(low<high)

31、 {

32、 int pos=qk(a,low,high);

33、 qsort(a,low,pos-1);

34、 qsort(a,pos+1,high);

35、 }

36、}

37、void main()

38、{

39、 int a[len]={7,4,5,1,2,3,6};

40、 cout<<"快速排序后的结果为:"<<endl;

41、 qsort(a,0,len-1);

42、 for(int i=0;i<len;i++)

43、 {

44、 cout<<a[i]<<' ';

45、 }

46、 cout<<endl;

47、}

48、复杂度分析:快速排序最好的情况就是每一趟排序将序列划分为两个部分,正好在表中间将表划分为两个大小相等的子表,类似于折半查找,此时复杂度为O(nlog2n).

49、最坏的情况就是已经排好序,则第一趟经过n-1次比较,第一个记录定在原位置,左部子表为空表,右部子表为n-1个记录,第二趟n-1个记录经过n-2次比较,第二个记录定在原位置.....即此时快速排序内层中的两个while循环不执行,此时快速排序退化为冒泡排序,总的比较次数为n*(n-1)/2,复杂度为O(n*n).

以上就是快速排序这篇文章的一些介绍,希望对大家有所帮助。

  免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。

 
分享:
最新文章