基本思路可以借鉴博客:https://blog.csdn.net/code_ac/article/details/74158681
代码:
#include <stdio.h>
void swap(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
int partition(int a[], int p, int r)
{
int i = p;
int j = r + 1; //+1的目的是为了--j
int x = a[p]; //选择区间第一个数位基准
while(1){
while(i<r && a[++i]<x);//从前面开始找第一个比基准大的
while(a[--j]>x); //从后面开始找第一个比基准小的
if(i>=j) break; //结束
swap(a,i,j); //交换两个数
}
swap(a,j,p); //将基准交换到j位置
return j;
}
void quicksort(int a[], int p, int r)
{
if(p<r) //不要忘了,当一个区间的左端大于等于右端时,就说明到了不能再分了
{
int q = partition(a,p,r);//基准的位置
quicksort(a,p,q-1); //基准左区间
quicksort(a,q+1,r); //基准右区间
}
}
int main()
{
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N = 12;
quicksort(a, 0, N-1);
for(i=0; i<N; i++) printf("%d ", a[i]);
printf("\n");
return 0;
}