基數排序(桶子法)學習筆記

2021-10-24 07:20:33 字數 2284 閱讀 5568

一、什麼是基數排序

基數排序(radix sort)屬於「分配式排序」(distribution sort),又稱「桶子法」(bucket sort)或bin sort,顧名思義,它是通過鍵值的各個位的值,將要排序的元素分配至某些「桶」中,達到排序的作用

基數排序法是屬於穩定性的排序,基數排序法的是效率高的穩定性排序法

基數排序(radix sort)是桶排序的擴充套件

基數排序是2023年赫爾曼·何樂禮發明的。它是這樣實現的:將整數按位數切割成不同的數字,然後按每個位數分別比較。

二、基數排序的思想

1、將所有待比較數值統一為同樣的數字長度,數字較短的數前面補零。然後,

從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完

成以後,數列就變成乙個有序序列。

三、實現需要基數排序需要考慮的點

1、根據上面的排序次數、怎麼知道要排序多少次?

———解答—— 陣列中數值最大的元素是幾位數的就排序幾次

2、怎麼根據排序的次數取出個位數、十位數、百位數字?

——解答—— 乙個公式 (當前元素/x)%10

x,第一次是1 ,第二次是10 每次排序結束就讓x*10

四、**實現(暫時是自己根據排序的思想寫出來的,可能存在不足,日後會有更新、但排序正常)

public

class

radixsort

int[

] ints =

radixsort

(array)

; system.out.

println

(arrays.

tostring

(ints));

}public

static

int[

]radixsort

(int

array)

} system.out.

println

("最大值="

+maxvalue)

;while

(maxvalue/

10>0)

system.out.

println

("位數:"

+maxvalueposition)

;// 第一次是1 第二次為10 、規律是1*10n次方 n從0遞增

int sortnumber =1;

// 用來記錄第幾次排序

int sort =1;

while

((maxvalueposition--

)>=0)

// 列印資料 begin

// system.out.println("桶資料如下");

// for (int i = 0; i < 10; i++)

// system.out.println("");

// }

// system.out.println("桶下標記錄如下");

// for (int i = 0; i < bucketindex.length; i++)

// 列印資料 end

// 從桶中取出資料 放入陣列中

int j =0;

for(

int i =

0; i <

10; i++)}

// 列印資訊 begin

// system.out.println("第"+ sort++ +"次排序後");

// system.out.println(arrays.tostring(array));

// system.out.println("桶下標記錄如下");

// for (int i = 0; i < bucketindex.length; i++)

// 列印資訊 end

sortnumber *=10;

}return array;

}}

五、個人總結

這種排序的時間複雜度 o(nlog( r)m) ,但建立桶需要耗費空間、10個桶不變、每個桶的大小是需要排序的陣列的大小。

基數排序(也叫桶子排序)

基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為o nlog r m 其...

基數排序學習

快排雖稱快速排序,但是其嚴格來講 只能稱為是基於比較的排序演算法中相對很優秀的演算法 排序演算法的時間效率下界是o nlogn 是僅針對基於比較的排序演算法的 而今天講的o n 的基數排序演算法 是一種基於內容而不基於比較的排序演算法 下面進入正題,先來嘗試了解基數排序演算法 給出幾個數 239,1...

基數排序學習

乙個簡單有趣的演算法 基數排序是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。由於整數也可以表達字串 比如名字或日期 和特定格式的浮點數,所以基數排序也不是只能使用於整數。基數排序的方式可以採用 lsd least significant digital ...