1. 快速排序基本算法
1 #include2 const static int NUM = 47; 3 4 int quick_sort(int *a, int start, int end){ 5 if (start >= end) 6 return 0; 7 8 int partition = a[start]; //分割点value, 设置为第一个点.最后patition点设置为这个点 9 int i = start; //开始点10 int j = end; //结束点11 12 while(i = partition) //i可置换 14 --j;15 a[i] = a[j];16 17 while(i
2. 快速排序主要是定制比较函数,通过定制比较函数,可以实现不同的输出结果
下面算法定制排序,排序结果分为4个桶,桶内数据是升序排列。
1 #include2 #include 3 const static int BUCKET = 4; 4 5 void print(int *a, int start, int end){ 6 for (int i = start; i <= end; ++i){ 7 printf("%d ", a[i]); 8 } 9 printf("\n");10 }11 12 int comp(const void *a, const void *b){13 int va = *(int*)a;14 int vb = *(int*)b;15 16 if (va%BUCKET > vb%BUCKET){17 return 1; 18 } 19 else if (va%BUCKET < vb%BUCKET){20 return -1; 21 } 22 return va - vb; 23 }24 25 int main(){26 int a[] = { 3,1,9,5,4,6,2}; 27 int NUM = sizeof(a)/sizeof(int);28 29 print(a, 0, NUM-1);30 qsort(a, NUM, sizeof(int), comp);31 print(a, 0, NUM-1);32 return 0;33 }
输入: 3 1 9 5 4 6 2
输出: 4 1 5 9 2 6 3