一.快速排序
1.随机确定一个分界点作为x
2.调整范围:把比x小的数字放到x左边,比x大的放x右边,用两个指针来实现,先用i 指针从左边第一个数开始移动,直到碰到比x大的停止,再把指向右边第一个数的j 指针向中间移动,直到碰到比x小的停止,然后把i和j指向的数交换,交换完后两个 指针向中间移一位
3.递归对两边进行排序
#include <iostream>
using namespace std;
const int N=1e6+10;
int n;
int q[N];
void quick_sort(int q[],int l,int r){
if(l>r) return;
int x=q[l],i=l-1,j=r+1;//因为每次都是先往中间移动一格再判断,所以起始位置应该在左右两侧边界的左右
while(i<j){
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j) swap(q[i],q[j]);
}
quick_sort(q,l,j);//递归部分,分别对左右两个区间再排序
quick_sort(q,j+1,r);
}
int main()
{
cin>>n;
for(int i = 0; i < n; i ++)
{
cin>>q[i];
}
quick_sort(q, 0, n - 1);
for(int i = 0; i < n; i ++)
{
cout<<q[i];
}
cout<<endl;
return 0;
}