一、基數排序的思想
基數排序也稱「桶排序」。
它的基本思想就是:假設一組待排序資料,先對於資料基於個位排序,然後是基於百位排序,基於千位排序,最後使整個序列有序。
二、**基數排序
給定一組待排序序列
[51 26 7 33 27 534 7648 649 67 49]
1、第一趟排序
按每個陣列的個位數字歸到相應的桶裡,如下圖所示:
第一趟排序過後將每個桶裡的資料按順序摘出來,新的序列為:
[51 33 534 26 7 27 67 7648 649 69]
這樣這組資料就按個位數字排列有序了。
2、第二趟排序
按新生成的陣列的十位數字歸到相應的桶裡,如下圖所示:
接著按順序將數字摘出來,得到新的序列為:
[7 26 27 33 534 7648 649 49 51 67]
3、第三趟排序
按新生成的陣列的百位數字歸到相應的桶裡,如下圖所示:
接著繼續將每個數字按順序摘出來得到新的序列:
[7 26 27 33 49 51 67 534 7648 649]
4、第四趟排序
按新生成的陣列的千位數字歸到相應的桶裡,如下圖所示:
接著繼續將每個數字摘出來得到新的序列:
[7 26 27 33 49 51 67 534 649 7648]
這樣整個序列就排列有序了。
以上就是基數排序的整個過程。
三、**實現
//個位代表1 十位代表2 百位代表3
//求最大位數
intgetnumfin
(int arr,
int len)
}while
(max !=0)
}//獲取哪一位的數字
intgetfinnumber
(int val, iint pos)
void
radix
(int arr,
int len,
int fin)
;//代表每個桶當前可插入的元素的下標或者當前桶中的元素
int arrindex =0;
int buckectindex =0;
for(i; i <
10; i++
)for
(i =
0; i < len; i++
)for
(i =
0; i <
10; i++)}
for(i =
0; i <
10; i++)}
void
radixsort
(int arr,
int len)
}
八大排序 基數排序
基數排序 將整形10進製按每位拆分,然後從低位到高位依次比較各個位。每次比較完進行排序,直到整個陣列有序 主要分為兩個過程 1 分配,先從個位開始,根據位值 0 9 分別放到0 9號桶中 比如53,個位為3,則放入3號桶中 2 收集,再將放置在0 9號桶中的資料按順序放到陣列中 重複 1 2 過程,...
八大排序之基數排序
個人部落格 建議先看排序綜述,傳送門 資料結構與演算法系列之一 八大排序綜述。基數排序 英語 radix sort 是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。由於整數也可以表達字串 比如名字或日期 和特定格式的浮點數,所以基數排序也不是只能使用於整數...
八大排序(五) 基數排序
基數排序與之前的其他七種排序方法都不同,它不需要比較關鍵字的大小。以下用乙個例子來講解基數排序 假設有乙個陣列 73,22,93,43,55,14,28,65,39,81 1.首先根據個位數的數值,在走訪數值時將它們分配至編號0到9的桶子中,分配結果如下圖 2.將這些桶子中的數值按順序重新串接起來,...