快速排序-C++

快速排序的核心思想:分而治之

基本做法:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 //返回调整后基数(数组中第一个数)的位置
 5 int AdjustArray(int arrays[],int l,int r){
 6     int i=l,j=r;
 7     //拿到基数,挖了第一个坑位
 8     int x=arrays[i];
 9     while (i<j){
11         //先从右往左找到第一个小于基数的数
12         while(i<j && arrays[j]>=x){
13             j--;
14         }
15         //如果找到了,那么退出循环的原因就不是 i>=j
16         if(i<j){
17             //将j填在i坑位
18             arrays[i]=arrays[j];
19             i++;
20         }
21         //在反过来找第一个大于基数的数
22         while (i<j && arrays[i]<=x){
24             i++;
25         }
26         if(i<j){
27             arrays[j]=arrays[i];
28             j--;
29         }
30     }
31     //退出循环时i=j,将x填入该位置
32     arrays[i]=x;
34     return i;
35 }
37 //分治代码
38 void quick_sort(int arrays[],int l,int r){
39     if(l<r){
40         //找到基数位置
41         int i=AdjustArray(arrays,l,r);
42         //分别对左右半边排序
43         quick_sort(arrays,l,i-1);
44         quick_sort(arrays,i+1,r);
45     }
46 }
47 
48 int main(){
49     int arrays[10]={5,8,6,3,4,7,9,1,0,2};
50     quick_sort(arrays,0,9);
51     for(int a:arrays){
52         cout<<a<<endl;
53     }
54 }

 

posted @ 2020-09-18 16:39  苗头hhh  阅读(49)  评论(0)    收藏  举报