快排的重点是对切分函数(Partion)的编写:
#include<stdio.h> void swapint(int &a,int &b) { int temp = a; a = b; b = temp; } int Partion(int a[],int start,int end) { int i = start,j = end +1; int v = a[start]; while(true) { while(a[++i]<v) if(i==end) break; while(a[--j]>v) if(j==start) break; if(i>=j) break; swapint(a[i],a[j]); } swapint(a[start],a[j]); return j; } void QuickSort(int a[],int length) { QuickSort(a,0,length-1); } void QuickSort(int a[],int start,int end) { if(end <= start) return; int vv = Partion(a,start,end); QuickSort(a,start,vv-1); QuickSort(a,vv+1,end); } int main() { int aa[] = {15,18,1,6,2,9,3,4,10,12,5,7}; int len=sizeof(aa)/sizeof(aa[0]); printf("数组aa的排序之前的次序:\n"); for(int i=0;i<len;++i) { printf("%d ",aa[i]); } printf("\n"); QuickSort(aa,len); printf("数组aa的排序之后的次序:\n"); for(int i=0;i<len;++i) { printf("%d ",aa[i]); } getchar(); }
参考:《算法(第四版)》 《剑指offer》