**:
(一)基數排序的思想:
不直接比較數與數的大小。把待排序的整數按位分,分為個位,十位…..從小到大依次將位數進行排序。
實際上分為兩個過程:分配和收集。
分配就是:從個位開始,按位數從小到大把資料排好,分別放進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,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為...