#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void qq(int a[],int low,int high)
{
if(low<high)
{
int n=high;
int m=low;
int r=a[low];
while(low<high)
{
while(low<high && a[high]>=r)high--;
a[low]=a[high];
while(low<high && a[low]<=r)low++;
a[high]=a[low];
}
a[low]=r;
qq(a,m,low-1);
qq(a,low+1,n);
}
}
int main()
{
int i,a[10];
srand(time(0));
for(i=0;i<10;i++)
{
a[i]=rand()%10;
printf("%3d",a[i]);
}
printf("\n");
qq(a,0,9);
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
return 0;
}
将数组中第一个数作为轴,一次快排将轴放到应在的位置,
然后对左边递归,右边递归
例如
3 6 8 4 58 7 1
以三为轴,存到r中然后分别从左右查找
1 6 8 4 58 7 1
1 6 8 4 58 7 6
这样low==high,将r的值赋过去
1 3 8 4 58 7 6
然后分别对左右递归
快排完成