#include<stdio.h>
#include<iostream>
using namespace std;
void quicksort(int a[],int l,int r)
{
int i,j,x;
i=l;
j=r;
x=a[l];
if(l>=r)
return;
while(i<j)
{
while(j>i && a[j]>=x)//此处注意,j>i,在执行后就变成等于了,如果两个用等于,后面可能会出现i超出数组的情况
{
j--;
}
if(i<j)
{
//cout<<"一处交换"<<a[i] <<i <<a[j]<<j <<endl;
a[i++]=a[j];
}
while(i<j&& a[i]<=x)
i++;
if(i<j)
{
//cout<<"二处交换"<<a[i] <<i <<a[j]<<j <<endl;
a[j--]=a[i];
}
}
a[i]=x;
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
int main()
{
int n;
int a[100005];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
quicksort(a,0,n-1);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
快速排序复习
最新推荐文章于 2024-09-19 22:25:26 发布