9 排序演算法 桶排序

2021-10-10 21:21:41 字數 1390 閱讀 6252

桶排序是計數排序的公升級版。它利用了函式的對映關係,高效與否的關鍵就在於這個對映函式的確定。為了使桶排序更加高效,我們需要做到這兩點:

在額外空間充足的情況下,盡量增大桶的數量

使用的對映函式能夠將輸入的 n 個資料均勻的分配到 k 個桶中

同時,對於桶中元素的排序,選擇何種比較排序演算法對於效能的影響至關重要。

1. 什麼時候最快

當輸入的資料可以均勻的分配到每乙個桶中。

2. 什麼時候最慢

當輸入的資料被分配到了同乙個桶中。

3. 示意圖

元素分布在桶中:

然後,元素在每個桶中排序:

**實現

package com.data.algorithm;

/** * 排序型別: 桶排序

* 最優:所有資料平均在分配在每個桶

* 最差:所有資料集中在乙個桶,此類場景可以使用 計數排序

* 演算法點評:實現簡單,演算法穩定,時間複雜度低o(n),空間複雜度比計數排序高o(max+1),是乙個完美的演算法

* */

public class bucketsortdemo ;

bucketsort(ins);

for (int i : ins) }

public static void bucketsort(int ins)

int max = integer.min_value;

//1.遍歷找到最大值

for (int i = 0; i < ins.length; i++)

//2.因為考慮正整數,所以需要max+1個桶,乙個桶代表乙個數值,並不是範圍,對於大量資料排序這個地方最好使用鏈式結構,這樣有利於記憶體利用率,但是加大複雜度和降低查詢效率

int bucket = new int[max + 1];

//3.放數入桶的操作,相同的數放在同乙個桶中,桶排序最關鍵的步驟,利用被排序數和桶的對映關係,無需比較。桶排序空間複雜度比較高。

for (int i = 0; i < ins.length; i++)

int i = 0;

//4.遍歷桶陣列

for (int j = 0; j < bucket.length; j++)

for (int k = 0; k < bucket[j]; ++k) }}

}

排序演算法 桶排

時間複雜度最少的排序演算法之一桶排,線性階,具體原始碼如下 public class tongpai int max findmax arr int min findmin arr int cha max min 所要排序陣列的最大值和最小值的差 int tong new int cha 1 創造桶...

基礎演算法之四 排序 之桶排序

桶排序是迄今為止最快的一種排序,其時間複雜度僅為 n 也就是線性複雜度。其主要思想在於 建立有序的桶,遍歷待排序元素,在遍歷此元素的同時,將其對映到對應的桶中。這樣,遍歷一遍,所有的元素就在桶中有了對映。而桶是有序的,再從有序的桶中,將資料重新置於陣列中 這樣就完成了排序。1.最簡單的桶排序演算法 ...

演算法入門(一)排序之桶排序

當我們需要對一組資料 無序 進行排序時,假設期末考試完了,老師要按照分數對大家的名次進行排序,這裡假設五個同學分別考了 5分 3分 5分 2分 8分 滿分十分 當然,我們一下子就看出了其中的奧妙,但是我們用程式該怎麼寫呢?我們可以建立乙個大小為11的陣列 因為這裡統計的是0到10之間的數字出現次數 ...