一.問題:
現在有n個位數為d的x進製的數,把這些數進行排序。
如: 現有陣列a:,其元素均為16進製制數,最大位數為4,一共4個元素。
二.思路:
以為例,一位一位的排(從低位到高位)。最終順序即為所求。
三.步驟:
1.開始算個位:
a: i0
1234
ai52
135132
250150
b1:統計上面5個數的個位數情況 j0
1234
5678
9bi20
2001
0000
b2:統計不大於j的元素個數j0
1234
5678
9bi22
4445
5555
c: 遍歷a,檢查其元素的個位,決定其位置,計數排序後的結果,作為臨時結果i0
1234
ai150
25052
132135
2.開始算十位:c:i
0123
4ai132135
150250
523.開始算百位:c:i
0123
4ai52132
135150
250
我們陣列a中的元素都是由陣列z內的元素構成。因此b1,b2的可以進行改進。
b1:
0123
4520
2001
b2:01
2345
2244
45假設陣列z中最大最小元素的值:min=a,max=b。則需要將數字位減去a,然後再從b1,b2中找。
四.**展示:
public class radixsort
public static void main(string args) ;
radixsort(a);
system.out.println(arrays.tostring(a)); }
static void radixsort(int a)
//重新賦值
for(int j=0;jdigit)
} return digit;
}
五.引理:
1.n個d位的k進製數,用radix-sort排序,若使用穩定排序方法(k不太大,推薦計數排序,耗時θ(n+k)),那麼radix-sort將在θ(d(n+k))時間內排好他。
2.n個2進製數,最大位數為b,給定乙個r(r<=b),那麼
radix-sort將在θ((b/r)(n+2^r))內排好 i
0123
4ai52135
132250
150
CLRS 8 3基數排序
8.3 1 從左到右分別是原始排序,第一輪 第二輪和最終排序。穩定 插入排序,歸併排序。不穩定 堆排序,快速排序。通過給每個元素新增乙個最初位置屬性,當元素值相等時比較初始位置。從而使得排序穩定,需要額外空間 n 8.3 3 從低到高位排序,現在假設第 t 位已經排序好,並且是穩定的排序。在第 t ...
演算法導論CLRS 8 3 基數排序
8.3 基數排序 radix sort include include include includeusing namespace std typedef vector iterator tvecite typedef vector iterator tvecpite void radixsort...
排序 基數排序
基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...