快速排序的平均性能较好,为原址排序,时间复杂度为T(n)=n*lg(n).
#include<stdio.h> int PARTITION(int A[],int p,int r){ int i,j,x,t; i=p-1; x=A[r]; for(j=p;j<r;j++) if(A[j]<=x){ i++; 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; } //改进后的,随机选择主元 int RANDOM_PARTITION(int A[],int p, int r){ int x,i; i=rand()%(r-p)+p; x=A[i]; A[i]=A[r]; A[r]=x; return PARTITION(A,p,r); } void RANDOM_QUICKSORT(int A[],int p,int r){ int q; if(p<r){ q=RANDOM_PARTITION(A,p,r); //q=PARTITION(A,p,r); RANDOM_QUICKSORT(A,p,q-1); RANDOM_QUICKSORT(A,q+1,r); } } void main(){ int i=100; int j; int A[16]={10,7,5,3,2,8,14,15,16,25,24,23,20,38,18,20}; RANDOM_QUICKSORT(A,0,15); for(j=0;j<16;j++) printf("%d ",A[j]); }