#include <stdio.h>
void quicksort(int *a,int start,int end)
{
int i=start,j=end-1;
int key=a[i];
if(i<j){
while(i<j){//一次循环就是一个从右到左再从左到右的交换,此循环完成,基准位于中间,剩下左边比基准小的跟右边比基准大的需要排序
while(a[j]>key&&i<j){//从右开始跟基准比较,如果比基准大,不变,往前一位继续比
j--;
}
if(i<j){//,如果比基准小则赋值到左边
a[i]=a[j];
i++;//
}
while(a[i]<key&&i<j){//从左边开始,从赋值的下一位开始跟基准比大小,如果比基准小,则往后一位继续比较
i++;
}
if(i<j){//比基准大,那么赋值到右边,从右边继续跟基准比
a[j]=a[i];
j--;
}
}
a[i]=key;//基准的左右分好之后,把基准的值赋给中间
quicksort(a,start,i);//比基准小的排序
quicksort(a,i+1,end);//比基准大的排序
}
}
int main()
{
int a[10]={3,5,4,8,2,6,9,7,3,10};
quicksort(a,0,10);
for(int i=0;i<10;i++){
printf("%4d",a[i]);
}
printf("\n");
return 0;
}