#include <stdio.h>
void quick_sort(int arr[],int left,int right)
{
//递归结束条件
if(left >= right)
return;
//枢轴,不同的取法有不同的效果,这里图方便取最左边的值
int pivot = arr[left];
int leftIndex = left;//左索引
int rightIndex = right;//右索引
//索引“左右横跳”与枢轴比大小
while(leftIndex < rightIndex)
{
//因为把最左边的值给了枢轴
//所以先从右往左找比枢轴大的值,大或等就索引往左,小就停
while(leftIndex < rightIndex && arr[rightIndex] >= pivot)
rightIndex--;//大或等就索引往左
//最终右索引找到了比枢轴小的数
if(leftIndex < rightIndex)
arr[leftIndex] = arr[rightIndex];//小的放左边
//现在右索引为“空”,开始从左往右找比枢轴小的数,小或等就索引往右,大就停
while(leftIndex < rightIndex && arr[leftIndex] <= pivot)
leftIndex++;//小或等就索引往右
//最终左索引找到了比枢轴大的数
if(leftIndex < rightIndex)
arr[rightIndex] = arr[leftIndex];
}
//现在左右索引处于相同位置
//把枢轴放进最后留出来的空里
arr[leftIndex] = pivot;
//以枢轴为分界点,左右两边分别开始新的排序
quick_sort(arr,left,leftIndex-1);//新右索引是旧左索引减一
quick_sort(arr,rightIndex+1,right);//新左索引是旧右索引加一
}
int main() {
//数组长度
int n;
scanf("%d",&n);
//给数组赋值
int arr[n];
int i;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
//排序
quick_sort(arr,0,n-1);//右边两个传的是数组索引
//排序结束后输出
for(i=0;i<n;i++)
{
printf("%d",arr[i]);
if(i != n-1)
printf(" ");
}
return 0;
}