快速排序-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 }

浙公网安备 33010602011771号