桶式排序
怎么理解桶式排序呢?
简单地说,桶式排序就是当我们知道待排序的每一个数据都大于等于零,并且小于一个正整数M,那么我们给出一个大小为M的数组,称之为bucket。于是这个数组能够容纳待排序的每一个数据的信息,我们遍历待排序数据,对于每一个数据i,我们使对应的bucket[i]加1。遍历完成之后,我们输出bucket数组中大于零的元素对应的序号(bucket[i]是多少,就打印多少个i出来)。那么输出的结果就是排好的数据。
桶式排序的复杂度分析:遍历待排序数据的过程O(N),输出bucket中的元素的过程O(M)。所以复杂度为O(M+N)。
简单的代码实现如下:
1 #include <cstdio> 2 #include <cstdlib> 3 4 void 5 BucketSort(int arr[], int len, int bucket[]) 6 { 7 for (int i = 0; i < len; i++) { 8 bucket[arr[i]]++; 9 } 10 } 11 12 int 13 main(int argc, char** argv) 14 { 15 int arr[8] = {2, 7, 5, 29, 0, 3, 7, 21}; 16 int bucket[30] = {0}; 17 18 for (int i = 0; i < 8; i++) { 19 printf("%d\t", arr[i]); 20 } 21 printf("\n"); 22 23 BucketSort(arr, 8, bucket); 24 25 for (int i = 0; i < 30; i++) { 26 while (bucket[i] >0) { 27 printf("%d\t", i); 28 bucket[i]--; 29 } 30 } 31 printf("\n"); 32 33 system("pause"); 34 return 0; 35 }