1.从头开始找比第一个大的数
与从尾开始找比第一个小的数交换
最后交叉后,第一个数插入到这个位置
左右递归。。。
2.注意交叉后的位置是换end1!!!
#include <cstdio>
#include <cstring>
using namespace std;
int n;
int a[10000];
void quickSort(int begin,int end)
{
int i,begin1,end1,x,temp;
if (begin>=end)
return ;
begin1=begin+1;
end1=end;
x=a[begin];
while (begin1<=end1)
{
while (a[begin1]<x && begin1<=end)
begin1++;
while (a[end1]>x && end1>begin)
end1--;
if (begin1<end1)
{
temp=a[begin1];
a[begin1]=a[end1];
a[end1]=temp;
begin1++; end1--;
}
}
temp=a[begin]; //与end1换位
a[begin]=a[end1];
a[end1]=temp;
quickSort(begin,end1-1);
quickSort(end1+1,end);
}
int main()
{
int i;
freopen("a.txt","r",stdin);
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
quickSort(0,n-1);
for (i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}