快速排序(分治算法)
const int n = 1e6 + 10;
int a[N];
//a[]:待排序数组,L:排序数组的起始下标,R:排序数组的结束下标
void quick_sort(int a[],int L,int R){
if(l >= r){return;} //递归的终止条件
int x = a[l]; //选取排序的比较对象
int i = L - 1; //设置排序的左指针
int j = R + 1; //设置排序的右指针
while(i<j){ //只要左右指针没相遇就循环进行
do i++; while( a[i]<x ); //左指针向右寻找
do j--; while( a[j]>x ); //右指针向左寻找
if(i<j){swap(a[i],a[j]); } //如果找到了就交换两个位置的变量
}
quick_sort(a,L,j); //递归左区间
quick_sort(a,j+1,R) //递归右区间
}
int main(){
int n;
int a[10010];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
quick(a,0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<” ”;
}
cout<<endl;
}
来源:https://www.cnblogs.com/Flydoggie/p/12196165.html