基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
#include<stdio.h> int partition(int *a,int p,int r); int quicksort(int *a,int p,int r); int main() { int k; int a[10]={3,4,5,10,1,7,6,9,8,2}; quicksort(a,0,9); // partition(a,0,9); for(k=0;k<9;k++) { printf("%d ",a[k]); } printf("%d\n",a[9]); return 0; } int quicksort(int *a,int p,int r) { int q=0; if(p<r) { q=partition(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r); } } int partition(int *a,int p,int r) { int x,i,t,j; x=a[r]; i=p-1; for(j=p;j<r;j++) { if(a[j]<x) { i=i+1; t=a[i]; a[i]=a[j]; a[j]=t; } } t=a[i+1]; a[i+1]=a[r]; a[r]=t; return i+1; }