#include<stdio.h>
int partition(int* a,int i,int j)//i指向开头,j指向结尾
{
int x = a[i];
while(i<j)//i<j是贯彻始终的条件,一旦i==j,就该返回索引值了
{
while(i<j&&a[j]>=x)//正常情况(后比前大)j往前移
{
j--;
}
if(i<j)//跳出循环,后比前大,不正常,后去占前的坑
{
a[i] = a[j];
i++;
}
while(i<j&&a[i]<=x)//前比后大,正常,i后移
{
i++;
}
if(i<j)
{
a[j] = a[i];//前占后的坑
}
}
a[i] = x;
return i;
}
void QuickSort(int*a,int i,int j)
{
if(i<j)//结束递归的条件
{
int index = partition(a,i,j);
partition(a,i,index-1);
partition(a,index+1,j);
}
}
int main()
{
int a[8] = {1,5,7,9,14,16,25,36};
int size = 8;
QuickSort(a,0,7);
for(int i = 0;i<8;i++)
printf("%d ",a[i]);
return 0;
}