排序演算法 基數排序

2021-08-17 01:36:43 字數 1611 閱讀 7929

**:

(一)基數排序的思想:

不直接比較數與數的大小。把待排序的整數按位分,分為個位,十位…..從小到大依次將位數進行排序。

實際上分為兩個過程:分配和收集。

分配就是:從個位開始,按位數從小到大把資料排好,分別放進0–9這10個桶中;

收集就是:依次將0-9桶中的資料放進陣列中

重複這兩個過程直到最高位

(二)過程:

比如現在要排序

首先按個位的大小依次排序,排序結果如下:

按十位進行排序,結果如下:

按百位排序後,結果如下:

(三)**如下:

public

static

void

main(string args) ;

radixsort(arr,10,4);

showarr(arr);

//12 44 72 121 233 292 1200

} //基數排序

/**

*@param arr 待排序陣列

*@param radix 基數(10,盒子個數)

*@param d 待排序中,最大的位數

* */

public

static

void

radixsort(int arr,int radix,int d)

//統計count陣列的前j位(包含j)共有多少個數

for(int j=1;j1];

}//按子關鍵字對指定的資料進行排序,因為開始是從前往後放,現在從後往前讀取,保證基數排序的穩定性

for(int j=arr.length-1;j>=0;j--)

divide = divide * radix; // 1 10 100

}

}

(四)說明:分配的時間複雜度為o(n)

收集的的時間複雜度為o(radix)

分配和收集共需要distance趟,

所以基數排序的時間複雜度為o(d(n+r))

我們可以看出,基數排序的效率和初始序列是否有序沒有關聯。

整數時長度10w以上,最大值100w以下效率最好

比其他排序好在可以適用字串,或者其他根據多個條件排序的場景,如日期(先按日排,月排,年排)。

排序演算法 基數排序

基數排序 思想 基數排序屬於 分配式排序 分為高位優先法msd和低位優先法lsd 低位優先法lsd 從最低位k0開始排序 對於排好的序列再用次低位k1排序 依次重複,直至對最高位kd 1排好序後,整個序列稱為有序的 這是乙個分 收 分 收 分 收的過程 特點 穩定 空間複雜度 o dn 時間複雜度 ...

排序演算法 基數排序

基數排序稱桶排序。它按照記錄的各位值逐步進行排序。適用於整數型別的排序。基數排序不同於別的排序方法通過比較和交換來排序,它是通過按照桶來分配和收集的方法實現的。基本思想 假設待排序的記錄都是m位d進製 不足m位的高位補0 設定d個桶 0,1,d 1 首先將序列中的記錄按照最低位值的大小分配到各個桶中...

排序演算法 基數排序

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