基數排序(radix sort)屬於「分配式排序」(distribution sort),又稱「桶子法」(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些「桶」中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為o (nlog®m),其中r為所採取的基數,而m為堆數,在某些時候,基數排序法的效率高於其它的穩定性排序法。從低位開始將要排序的陣列按照這一位的值放入對應編號0-9的桶中。等待低位排完得到乙個序列,將這個序列放回原陣列。再根據次低位重新放入相應的桶中,重複操作,至此排到最高位,此時從桶中取出的資料,即為排序後的資料。
先找出陣列中的最大值,以便確定最大的位數
從低位進行取值,將所有的數字根據對應位數的值放入對應的桶中
從桶中依次取出資料放入陣列中
重複(2,3)步驟,直至取到最高位即可
假設陣列arr = ,根據上面步驟操作如下
* 基數排序
* @author: han-ylun
* @date 2019/4/27
* @version 1.0
*/public
class
radixsort
int k =0;
for(
int j =
0; j <
10; j++)}
}}}/**
* 遞迴,求出陣列的最大值
* @param arr 陣列
* @param l 陣列的第乙個數
* @param r 陣列的最後乙個數
* @return 陣列中的最大值
*/private
static
intfindmax
(int
arr,
int l,
int r)
else
else}}
public
static
void
main
(string[
] args)
;radixsort
(arr)
;for
(int i =
0; i < arr.length ; i++)}
}
演算法 排序之基數排序
基數排序也是穩定的內排序。因為它的實現是基於內部使用了穩定的排序實現的所以基數排序整體是穩定的,而且時間複雜度為o n 舉個例子 現在我們將一些3 多 位數排序,如果你說直接判斷就好的話,那你就太天真了,因為那就又變成看o nlgn 或者o n 如何能降低時間複雜度變成o n 呢?那就要使用線性時間...
排序演算法之基數排序
首先從多排序碼排序開始介紹基數排序。以撲克牌排序為例。每張撲克牌有兩個 排序碼 花色和面值。其有序關係為 如果把所有撲克牌排成以下次序 2,a,2,a,2,a,2,a 這就是多排序碼排序。排序後形成的有序序列叫做字典有序序列。一般情況下,假定有乙個n個元素的序列 v 0,v1 vn 1 且每個元素v...
排序演算法之基數排序
如果我們要排序的資料具有多個關鍵字域,那就可以採用基數排序的方法了。基數排序的主要思想是 假如參加排序的元素最高具有d位,有的數沒有d位那麼多,則在其欠缺的高位補0,將元素先按最低位 設最右邊的位為最低位 的值進行排序,然後按次低位進行排序.最後進行最高位的排序。基數排序如果想達到理想的目的,必須滿...