当前位置:   article > 正文

c语言快速排序法代码及注释_快速排序c语言代码以及解释

快速排序c语言代码以及解释
  1. #include <stdio.h>
  2. //总共需要三部分,part1:快速排列的排列部分
  3. //part2:递归部分;
  4. //part3:主函数
  5. //part1
  6. int sorted(int a[],int low,int high){//需要一个数列两个指针
  7. int temp;
  8. temp=a[low];//将判断值取出来
  9. while(low<high) {
  10. while(low<high && temp<=a[high])
  11. high--;
  12. if(low<high)
  13. a[low]=a[high];
  14. while(low<high && a[low]<=temp)
  15. low++;
  16. if(low<high)
  17. a[high]=a[low];
  18. }//该循环结束时两个指针重合
  19. a[low]=temp;//基础值归位
  20. return low;//返回的是指针返回位置 ,此时low和high的值一样,所以返回值是谁无所谓
  21. }
  22. //part2 递归部分
  23. void Quick_sort(int a[], int start,int end){
  24. int pos;
  25. if(start<end){
  26. pos =sorted(a,start,end);//第一遍循环,找到中间值位置
  27. Quick_sort(a,start,pos-1);//开始循环将已经分为两半的(0~pos-1)小于基础值的部分递归排序
  28. Quick_sort(a,pos+1,end) ;//开始循环将已经分为两半的(pos+1~end)大于基础值的部分递归排序
  29. return;
  30. }
  31. }
  32. //part3:编写主函数
  33. int main(){
  34. int a[]={1,54,89,7,56,42,63};
  35. int len=(int)sizeof(a)/sizeof(*a);
  36. Quick_sort(a,0,len-1);
  37. for(int i=0;i<len;i++)
  38. printf("%d\n",a[i]);
  39. return 0;
  40. }

本人学习笔记

重难点

  1:为什么a[low]可以直接等于a[high]?

       因为在编写快速排列部分时,我们已经将基础值暂存在temp中,所以a[low]=a[high]时,原来的数据并不会消失。同时我们一定是交替使用a[low]=a[high]和a[high]=a[low]两条语句。这样便不会有数据的丢失。

2:递归部分语句是否可以省略一句?

  不可以。对于每一小段的队列进行排序,都有三步。确定基础值位置,基础值左边的数据全部小于基础值。右边数据大于基础值。三条递归语句对应三个排序步骤。

画图最可以清晰易懂。

以下内容为排序部分的单步执行状态

例如:25,56,34,15,5

第一次temp=25;low=0,high=4;

经过比较,5<25,不执行high--;high=4,low=0;给a[low]赋值

temp=25;a[0]=a[high]=5;   a[]={5,56,34,15,5}

再从从左往右比较;low=0,a[0]<25;low++;   low=1 ;a[1] = 56;   56>25  此时low=1;  high=4;

给a[high]赋值,a[4]=a[1] = 56      a[]={5,56,34,15,56}

a[4]=56>25;high--;   high=3;  a[3]=15 <25;   low=1;  high=3;

给a[low]赋值  a[1]=a[3]=15     a[]={5,15,34,15,56}

由于a[1]=15<25,所以low++;     low = 2 ;     a[2] =34>25   hign=3;

给a[high]赋值,a[3]=a[2]=34      a={5,15,34,34,56}

a[high]=34>25;  high--;   high=2=low  所有循环结束

此时low=high=2

a[low]=temp=a[2]=25;

a[]={5,15,25,34,56}

25左边的数都小于25,右边的数都大于25

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/思考机器6/article/detail/62991
推荐阅读
相关标签
  

闽ICP备14008679号