- 把數據放進若干個桶,然后在桶里用其他排序,近乎分治思想。從數值的低位到高位依次排序,有幾位就排序幾次。例如二位數就排兩次,三位數就排三次,依次按照個十百...的順序來排序。
第一次排序:50 ????????12 ????????43 ????????23 ????????33???????? 15???????? 66 ????????98???????? 18???????? 89
第二次排序:12 ????????15 ????????18 ????????23 ????????33 ????????43 ????????50???????? 66 ????????89 ????????98
代碼:
//桶排序 void bucket_sort(int* a, int len){ int n = 1;int idx;int k;int* pTemp = NULL;while (n<AREA){//循環 log10AREA 次//1 做桶 并初始化桶pTemp = malloc(10 * len *sizeof(int)); #if 0for (int i = 0; i < 10; i++){for (int j = 0; j < len; j++){pTemp[i*len + j] = -1;}} #elsefor (int i = 0; i < 10*len; i++){pTemp[i] = -1;} #endif//2 根據特性(對應位作為桶的編號)放入桶中for (int i = 0; i < len; i++){//a[i]idx = a[i] / n % 10;//獲取到數據這一輪要看的位上的數據pTemp[ idx*len + i] = a[i];}//3 從桶中取出,覆蓋a數組k = 0;for (int i = 0; i < 10 * len; i++){if (pTemp[i] != -1)a[k++] = pTemp[i];}//4 銷毀桶free(pTemp);pTemp = NULL;n *= 10;} }