c 實現基數排序

2021-06-08 13:06:23 字數 1597 閱讀 7602

(以下介紹內容**百科)

基數排序的方式可以採用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...