QuickSort 递归 分治
QuickSort
参考《算法导论》,《C程序设计语言》
#include<stdio.h> void swap(int v[], int i, int j); void view(int v[]); //主元为A[r] //partition后,A[p..i]<=A[r] //A[i+1]=A[r] //A[i+2..r]>A[r] int partition(int A[], int p, int r) { int x = A[r]; int i=p-1; for(int j=p;j<r;j++){ if(A[j]<=x){ i++; swap(A,i,j); } } swap(A,i+1,j); return i+1; }; //以递增顺序对v[p..r]进行排序 void quicksort(int A[], int p, int r) { if(p<r) { printf("partition A[%d] to A[%d]\n", p,r); int q = partition(A,p,r); view(A); printf("q=%d\n",q); printf("quicksort A[%d] to A[%d]\n", p,q-1); quicksort(A,p,q-1); printf("quicksort A[%d] to A[%d]\n", q+1,r); quicksort(A,q+1,r); } } int main() { int A[]={2,1,7,8,3,5,6,4}; view(A); quicksort(A,0,7); view(A); getchar(); getchar(); return 0; } void swap(int A[], int i, int j) { int temp; temp=A[i]; A[i]=A[j]; A[j]=temp; } void view(int A[]){//显示A数组当前状态 for(int i=0;i<8;i++){ putchar(A[i]+'0'); putchar(' '); } putchar('\n'); }
运行结果