国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c語言實現基數排序解析及代碼示例

2020-05-23 13:31:50
字體:
來源:轉載
供稿:網友

1.

基數排序(radixsort)屬于“分配式排序”(distributionsort),又稱“桶子法”(bucketsort)或binsort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達到排序的作用。

2.基數排序的實現方法分為兩種:

最高位優先(MostSignificantDigitfirst)法,簡稱MSD法:先按k1排序分組,同一組中記錄,關鍵碼k1相等,再對各組按k2排序分成子組,之后,對后面的關鍵碼繼續這樣的排序分組,直到按最次位關鍵碼kd對各子組排序后。再將各組連接起來,便得到一個有序序列。

最低位優先(LeastSignificantDigitfirst)法,簡稱LSD法:先從kd開始排序,再對kd-1進行排序,依次重復,直到對k1排序后便得到一個有序序列。

3.LSD基數排序的原理及代碼實現如下:

第一步

假設原來有一串數值如下所示:

73,22,93,43,55,14,28,65,39,81

首先根據個位數的數值,在走訪數值時將它們分配至編號0到9的桶子中:

0
1 81
2 22
3 73 93 43
4 14
5 55 65
6
7
8 28
9 39

第二步

接下來將這些桶子中的數值重新串接起來,成為以下的數列:

81,22,73,93,43,14,55,65,28,39

接著再進行一次分配,這次是根據十位數來分配:

0
1 14
2 22 28
3 39
4 43
5 55
6 65
7 73
8 81
9 93

第三步

接下來將這些桶子中的數值重新串接起來,成為以下的數列:

14,22,28,39,43,55,65,73,81,93

這時候整個數列已經排序完畢;如果排序的對象有三位數以上,則持續進行以上的動作直至最高位數為止。

#include<cstdio> #include<cstring> #include<algorithm> using namespace std;  int getDigitNum(int x){   if(x == 0) return 1;   int res = 0;   while(x){     res ++;     x /= 10;   }   return res; } void RadixSort(int data[], int n){   //find the Maximum and its digit number   int Max = data[0];   for(int i = 1; i < n; i++){     if(Max < data[i]) Max = data[i];   }   int maxNum = getDigitNum(Max);   //maxNum times radix sort   int divisor = 1;   for(int k = 0; k < maxNum; k++){     vector<int> g[10];//g[i]中包含了"末位"數字是i的data[]數組中的元素     for(int i = 0; i < 10; i++) g[i].clear();     for(int i = 0; i < n; i++){       int tmp = data[i] / divisor % 10;       g[tmp].push_back(data[i]);     }     int cnt = 0;     for(int i = 0; i < 10; i++){       for(int j = 0; j < g[i].size(); j++){         data[cnt++] = g[i][j];       }     }     divisor *= 10;   } } int main(){   int Array[10] = {73,22,93,43,55,14,28,65,39,81};   RadixSort(Array, 10);   for(int i = 0; i < 10; i++){     printf("%d ", Array[i]);   }   printf("/n");   return 0; } 

總結

以上就是本文關于c語言實現基數排序解析及代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吐鲁番市| 台山市| 达州市| 措勤县| 新泰市| 册亨县| 邻水| 葫芦岛市| 呼玛县| 安多县| 郯城县| 平谷区| 罗定市| 石屏县| 齐齐哈尔市| 双江| 阿鲁科尔沁旗| 河池市| 荣成市| 且末县| 沙雅县| 得荣县| 罗山县| 柳江县| 西青区| 武宁县| 旅游| 云浮市| 通城县| 南投市| 建瓯市| 平南县| 涟源市| 隆化县| 大宁县| 酒泉市| 诸城市| 邢台县| 科技| 杭锦后旗| 社旗县|