#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n;
int q[N];
void quick(int q[],int l,int r)
{
if(l>=r) return; //判边界,如果里面没有数 或者是有一个数就直接return
int x = q[l] ,i = l-1,j = r+1 ;//区分节点x i、j两个指针
while(i < j)//每次移动再交换 算一次迭代
{
do i++;while(q[i] < x);//移动i指针,只要q[i]小于x,就直到移动到q[i] >= x为止
do j--;while(q[j] > x);//移动j指针,只要q[j]大于x,就直到移动到q[i] <= x为止
//两个指针只要没有相遇的话,i就应该在前面,j就应该在后面
//直到两个指针相遇,i变到j后面
if(i<j) swap(q[i],q[j]);//交换两个数
}
quick(q,l,j);
quick(q,j+1,r);
}
int main()
{
scanf("%d",&n);
for(int i = 0 ;i < n ;i++)
scanf("%d",&q[i]);
quick(q,0,n-1);
for(int i = 0 ;i < n ;i++)
printf("%d ",q[i]);
printf("\n");
return 0;
}
快排万能代码
最新推荐文章于 2025-04-22 18:13:09 发布