//快速排序思想:
//在两端分别设置两个指针,先从左边的指针开始,如果指针左边的数都小
//于指针指向的数,指针的右边全都大于指针指针指向的数,那么就是
//正常的顺序,那么指针就往下走,如果不是那指针就停下,然后对另一个
//指针进行同样的操作,当两个指针都是不正常的顺序无法往下走了,就将
//两个指针的值互换,然后在从左边的指针开始走,直到左指针到了右指针
//的右边就表示遍历完了所有的指针,排序完成。
//一个排序算法是稳定的,代表就是如果这个序列中有相同的数,排序完后他们的相对位置不发生变化--------快速排序是不稳定的,所以将快速排序所应对的数
//变成一个互不相同的序列就是稳定的了,一维变成二维
include[HTML_REMOVED]
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];
int x = q[l + r >> 1]; //注意如果x像上面那样赋值的话对于大数据会超时,所以要这样写 l+r>>1
int i=l-1,j=r+1; //注意i ,j要分别在左右指针的两边 所以要-1 +1
while(i[HTML_REMOVED]x);
if(i<j)swap(q[i],q[j]);//并不需要比较q[i] q[j] 只要i在j的左边 就换
}
quick_sort(q,l,j);//别忘了使用递归遍历所有元素,先递归找好的l,j
quick_sort(q,j+1,r);//然后再左指针往下走
}
int main(){
scanf(“%d”,&n);
for(int i=0;i<n;i){scanf(“%d”,&q[i]);}//for循环给数组赋值
quick_sort(q,0,n-1);//调用函数开始排序,注意两个指针是端点,一个是0 一个是n-1
for(int i=0;i<n;i){
printf(“%d”,q[i]);
printf(” “);}
return 0;
}