考研-快速排序

Posted zgll

tags:

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

天勤2019考研数据结构

附上代码:

 1 void QuickSort(int R[],int low,int high){
 2     int temp;
 3     int i=low; int j=high;
 4     if(low<high){         //low==high 为递归出口
 5         temp=R[low];
 6 
 7         while(i<j){    //俩次查找的首要条件
 8 
 9         while(j>i && R[j]>=temp){      //从右往左查找,这个找 j 的语句有点秒
10             --j;
11         }
12         if(i<j){                    //排除是因为不满足j>i而跳出的while循环
13                 R[i]=R[j];
14                 ++i;
15         }
16 
17         while(i<j && R[i]<temp){       //从走往右查找,没有=号
18             ++i;
19         }
20         if(i<j){
21             R[j]=R[i];
22             --j;
23         }
24 
25         }
26         R[i]=temp;       //应该R[i]= 和R[j]= temp都一样,现在是i=j
27         for(int u=0;u<8;++u){
28            printf("%d ",R[u]);
29         }
30 
31         printf("i=j:%d low:%d high:%d temp:%d",i,low,high,temp);printf("
");
32 
33         QuickSort(R,low,i-1);
34         QuickSort(R,i+1,high);
35     }
36 }
int main()
{
    int r[8]={72,73,71,23,94,16,05,68};
    int a[8]={29,18,25,47,58,12,51,10};
    QuickSort(a,0,7);
QuickSort(r,0,7);
return 0;
}

先说r的排序状况:

技术分享图片

r每一次递归调用QuiklySort函数的结果(low<high)

技术分享图片

 

a的执行结果:

技术分享图片

但书上说的a数组每一次进行的数组划分是:

第一趟:10,18,25,12,29,58,51,47

第二趟:10,18,25,12,29,47,51,58

第三趟:10,12,18,25,29,47,51,58   

所以书上并不是先把左递归进行到底再进行的右递归!而是在同一层对所有的子序列进行快排!

=》也就是说:这本书上手工快排和代码快排的流程是不一样的,但本质是一样的,都是左右俩边不断递归,直到 i>=j ,而做题时不涉及到代码的情况下用手工快排就好。

 




以上是关于考研-快速排序的主要内容,如果未能解决你的问题,请参考以下文章

考研数据结构手记|快速排序

2023数据结构考研复习-排序

2023数据结构考研复习-排序

2022计算机考研408—数据结构—排序

数据结构 | 考研八大内部排序算法

计算机考研之数据结构重点知识19