#include<iostream>
using namespace std;
void quick_sort(int a[],int left,int right){
//终止条件——————————————————————————————————1
if(left>=right)
return ;
//关键代码——————————————————————————————————2
int pivot=a[left]; //pivot作为枢纽,比pivot大的数在左侧,小于pivot的数置于右侧。
int i=left,j=right;
while (i<j) {//关键性循环,一个萝卜一个坑。右→左(--j);左→右(++i)。。。
while(i<j && a[j]>=pivot) --j;
if (i<j){
a[i]=a[j];//a[i]=a[j]后,a[j]的值就可以被后续的a[i]覆盖了
++i;//a[i]处目前为小于pivot的原a[j]的值,i需要右移一位
}
while(i<j && a[i]<=pivot) ++i;
if(i<j){
a[j]=a[i];//a[j]=a[i]后,a[i]的值就可以被后续的a[j]覆盖了
++j;//a[j]处目前为大于pivot的原a[i]的值,j需要左移一位
}
}
a[i]=pivot;//while循环结束时i==j,找到pivot的坑。
//分治————————————————————————————————————3
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}
int main(){
int array[]={6, 3, 5, 7, 2, 4, 1, 8, 10, 9};
quick_sort(array,0,sizeof(array)/sizeof(array[0]) -1);
for(int i=0;i<sizeof array/sizeof array[0];i++)
cout<<array[i]<<" ";
cout<<endl;
return 0;
}