//寻找与key交换的数字,返回交换的数字的位置 int partition(int a[], int p, int r) { int i = p; int j = r + 1; int x = a[p]; while(1){ //寻找比key大的数字,找到停下 while(i<r && a[++i]<x); //i<r,是因为他先走可以一直走到最后 //寻找比key小的数字 while(a[--j]>x); //两者如果相遇甚至背向仍然没有找到 if(i>=j) break; //找到之后交换数字 swap(a,i,j); } swap(a,p,i);//key与i,j相遇的位置的数字进行交换 //如果ij相邻,取后面的数字 return i; } //快速排序 void quicksort(int a[], int p, int r) { if(p<r){ //与key交换的位置 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; }