//快速排序
#include<stdio.h>
#define N 10
void quicksort(int *a,int *low,int *high);
int *split(int *a,int *low,int *high);
int main()
{
int a[N];
int *low=a,*high=a+N-1;
int i=0;
for(;i<N;i++)
scanf("%d",&a[i]);
quicksort(a,low,high);
for(i=0;i<N;i++)
printf("%3d",*(a+i));
putchar('\n');
return 0;
}
//递归
void quicksort(int *a,int *low,int *high)
{
int *middle;
if(low>=high) //递归退出条件
return;
middle=split(a,low,high); //第一次排序并找到分割元素的位置
quicksort(a,low,middle-1); //在分割元素左边进行排序
quicksort(a,middle+1,high);//在分割元素右边进行排序
}
//排序
int *split(int *a,int *low,int *high)
{
int part_element=*low;
for(;;)
{
while(low<high && *high>part_element)
high--;
if(low>=high)
break;
*low=*high;
while(low<high && *low<part_element)
low++;
if(low>=high)
break;
*high=*low;
}
*low=part_element;
return low;
}
06-13