#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a[N];
int n;
void quick_sort(int a[],int l,int r)
{
if(l>=r)return;
//取中间数,用(l+r)/2也可
int x = a[(l+r)>>1],i=l-1,j=r+1;
//将比x小的数放在x左边,比x大的数放在x右边
while(i<j)
{
//从左区间找到比x大的数
do i++;while(a[i]<x);
//从右区间找到比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()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
quick_sort(a,1,n);
for(int i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
快速排序思路简介
于 2024-02-28 20:23:05 首次发布