该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数
#include<stdio.h>
int partition(int r[],int first,int end) //划分
{
int i=first,j=end; //初始化带划分区间
while(i<j)
{
while(i<j&&r[i]<=r[j]) j--; //右侧扫描
if(i<j)
{
int temp=r[i];r[i]=r[j];r[j]=temp; //将较小值交换到前面
i++;
}
while(i<j&&r[i]<=r[j]) i++; //左侧扫描
if(i<j)
{
int temp=r[i];r[i]=r[j];r[j]=temp; //将较大值交换到前面
j--;
}
}
return i;
}
void quicksort(int r[],int first,int end)
{
int pivot;
if(first<end)
{
pivot=partition(r,first,end); //划分,pivot为轴值
quicksort(r,first,pivot-1);
quicksort(r,pivot+1,end);
}
}
int main()
{
int r[]={9,8,7,6,5,4,3,2,1};
quicksort(r,0,8);
for(int i=0;i<9;i++)
printf("%d ",r[i]);
}