一、什麼是基數排序
基數排序(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 ...