(以下介紹內容**百科)
基數排序的方式可以採用lsd(least significant digital)或msd(most significant digital),lsd的排序方式由鍵值的最右邊開始,而msd則相反,由鍵值的最左邊開始。
以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
這時候整個數列已經排序完畢;如果排序的物件有三位數以上,則持續進行以上的動作直至最高位數為止。
lsd的基數排序適用於位數小的數列,如果位數多的話,使用msd的效率會比較好。msd的方式與lsd相反,是由高位數為基底開始進行分配,但在分配之後並不馬上合併回乙個陣列中,而是在每個「桶子」中建立建立「子桶」,將每個桶子中的數值按照下一數字的值分配到「子桶」中。在進行完最低位數的分配後再合併回單一的陣列中。
#include #include using namespace std;
//存放位數上的數所對應的陣列
int **temp;
int *forindex;
//用max來確定最大位數,用min來確定取哪個位置的數
int radixsort(int t, const int &length, int max, int min)
static int step = 0;
//用於取得某個固定位的值所需的除法位數
step = step * 10 ? step * 10 : 1;
//將陣列按照指定位數上的數分配到對應的中間變數陣列中
int index, j = 0;
for(int i = 0; i < length; i++)
//將中間變數陣列中的數重新賦值到陣列中
int k = 0;
for(int i = 0; i < 10; i++)
}min++;
radixsort(t, length, max, min);
}template int printarray(t *const t, int len)
cout<
基數排序 C 實現
template head.h include include include include head file template head.h using namespace std void radix sort int len sizeof arr sizeof arr 0 cout len...
基數排序 C
首先我們引入乙個多關鍵排序的概念 多關鍵字排序 假如現在有乙個員工表,要求按照薪資排序,年鈴相同的員工按照年齡排序。比如氣泡排序就是一種穩定排序,堆排序就是不穩定的排序,品,你細細的品 那麼對32,13,94,52,17,54,93排序,是否可以看做多關鍵字排序?比如32 13 52排序,先看個位2...
基數排序(c )
題目描述 根據輸入,輸出基數排序的每趟排序結果。輸入格式 輸入數字為正整數,先輸入排序數字個數,然後輸入需要排序的數字序列。輸出 每趟排序結果。要求 程式需要實現排序,其他可以使用stl包。示例測試集 輸入 8 2343666 152310 5594 592783278 輸出 152310 2343...