桶排序
1.原理:
將需要排序的陣列分在有限的桶裡
然後對每個桶中的數分別排序
(對每個桶的操作:1.別的排序演算法 2.以遞迴的方式繼續使用桶排序)
2.過程:
假設待排序的一組數統一的分布在乙個範圍中,並將這一範圍劃分成幾個子範圍,也就是桶
將待排序的一組數,分檔規入這些子桶,並將桶中的資料進行排序
將各個桶中的資料有序的合併起來
3.舉個例子:
設有陣列 array = [29, 25, 3, 49, 9, 37, 21, 43]
那麼陣列中最大數為 49
先設定 5 個桶
那麼每個桶可存放數的範圍為:0~9,10~19,20~29,30~39,40~49
然後分別將這些數放人自己所屬的桶
然後,分別對每個桶裡面的數進行排序
或者在將數放入桶的同時用插入排序進行排序
最後,將各個桶中的資料有序的合併起來
基數排序:
1.原理:
桶排序的拓展(我沒看出來這兩者的聯絡喵喵喵?
將整數按位數切割成不同的數字,然後按每個位數分別比較。
2.過程:
首先,將要比較的數值統一成同樣的數字長度(數字少的在前面補0)
然後,從最低位開始,依次進行一次排序
3.再舉個栗子(假裝**並茂嘿嘿嘿...
通過基數排序對陣列,它的示意圖如下:
計數排序:
1.原理:
把需要排序的陣列 分到有限的桶裡
2.過程:
假設有乙個a陣列,其中裝著要排序的數列
a數列的資料範圍為[x,y)
建立乙個大小為y的桶陣列r
將容量為y的桶陣列中的每乙個單元都看作乙個獨立的"桶"
遍歷每個陣列a
a的值為r陣列的下標
並將該桶存的數值+1
3.又舉個栗子:
a[3] = 5
r[5]++;
假設a=, max=10。
此時,將陣列a的所有資料都放到需要為0-9的桶中。如下圖:
桶排序 基數排序 計數基數排序 Java
前面已經講述了很多排序演算法,但是他們的排序演算法都是基於兩個值之間的比較,通過決策樹的方法可以證明深度為d的二叉樹則最多有 一些好的排序演算法是可以達到時間複雜度是線性的,桶排序就是其中一種。比如有n個數,但是這些數的最大數不超過m。這個時候就可以定義乙個含有m個元素的陣列 初始值為0 然後遍歷n...
排序 基數排序(計數排序 桶排序)
在此對於桶排序做出兩種方法 一.簡化版桶排序 如下 簡化版的桶排序 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...
計數排序 桶排序和基數排序
當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 n k 計數排序不是比較排序,排序的速度快於任何比較排序演算法。由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍 等於待排序陣列的最大值與最小值的差加上1 這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。例如 計數排...