桶排序 基數排序 計數排序

2022-05-24 07:03:08 字數 1176 閱讀 3062

桶排序

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 這使得計數排序對於資料範圍很大的陣列,需要大量時間和記憶體。例如 計數排...