桶排序是在陣列元素在某個小範圍內大量資料情況下時間複雜度為o(n)的排序。
假如資料的範圍為0~1000我們就開乙個1001大小的陣列進行排序,就是假如100出現了就將100的桶b[100]++;
以十進位制為例,基數指的是數的位,如個位,十位,百位等
基數排序就是多個桶進行桶排序,比如輸入的數最多有兩位,我們就先按十位進行桶排序,分為0~9的十個桶,b[0]存0 ~9的數,b[3]存30 ~39的數,然後對每個0-9的桶進行按個位數的桶排序,最後就是整體有序的陣列。
計數排序其實就是特殊的桶排序,就是多了乙個先找最大最小值開乙個大小為max-min+1的陣列進行桶排序,假如i(min<=i<=max)出現了,就放進桶b[i-min]++。
比桶排序所需的空間有所減少
它們都是時間複雜度為o(n)的排序,都比較適合在某個小範圍內大量重複資料的排序,而且都不需要進行記錄關鍵字間的比較。
桶排序 基數排序 計數基數排序 Java
前面已經講述了很多排序演算法,但是他們的排序演算法都是基於兩個值之間的比較,通過決策樹的方法可以證明深度為d的二叉樹則最多有 一些好的排序演算法是可以達到時間複雜度是線性的,桶排序就是其中一種。比如有n個數,但是這些數的最大數不超過m。這個時候就可以定義乙個含有m個元素的陣列 初始值為0 然後遍歷n...
桶排序 基數排序 計數排序
桶排序 1.原理 將需要排序的陣列分在有限的桶裡 然後對每個桶中的數分別排序 對每個桶的操作 1.別的排序演算法 2.以遞迴的方式繼續使用桶排序 2.過程 假設待排序的一組數統一的分布在乙個範圍中,並將這一範圍劃分成幾個子範圍,也就是桶 將待排序的一組數,分檔規入這些子桶,並將桶中的資料進行排序 將...
排序 基數排序(計數排序 桶排序)
在此對於桶排序做出兩種方法 一.簡化版桶排序 如下 簡化版的桶排序 include int main scanf d n 輸入乙個數n,表示接下來有n個數 for i 1 i n i 迴圈讀入n個數,並進行桶排序 for i 0 i 1000 i 依次判斷編號1000 0的桶 getchar get...