簡單的桶式排序 基於陣列的實現

2022-07-29 00:39:17 字數 463 閱讀 9592

本文介紹一種相對特殊的排序演算法,桶式排序,並提供其實現、分析其演算法複雜度。

桶式排序:

如果我們有n個整數,範圍從1到m(或從0到m-1),我們可以利用這個資訊得到一種快速的排序,叫做桶式排序(bucket sort)。我們留置乙個陣列,稱之為count,大小為m,並初始化為零。於是,count有m個單元(或桶),開始時他們都是空的。當陣列元素a[i]被讀入時count[a[i]]增1。在所有的輸入被讀進以後,掃瞄陣列count,列印輸出排好序的表。該演算法花費o(m+n)。

——摘自《資料結構與演算法分析-c語言描述》 p40

由此我們可以發現桶式排序需要滿足的兩個前提條件:第一,待排序陣列元素為非負整數;第二,待排序陣列元素有界。這兩個前提條件限制了桶式排序的應用範圍,但桶式排序演算法的思想是很值得我們學習和借鑑的。

基於陣列的實現:

桶排序的簡單實現

桶排序的思想有點像計數排序,又有點像快速排序,還用到一點hash的東西,值得仔細琢磨。具體做法如下,按照某種hash函式,將資料對映到不同的桶中,使用hash是因為我們要保證每個資料的對映過程應該在常數時間內完成。對映完成後,每個桶中的資料相比於其他桶都是有序的 也就是相鄰的桶有嚴格的順序 這個就有...

簡單的桶排序原理以及實現

今天學習的演算法,簡單桶排序。這遠遠稱不上桶排序演算法 所謂桶排序,就是將每個輸入的數放入它對應的桶中,最後再按照桶的順序從小到大或從大到小去逐一倒出來,這樣就實現桶排序了。下面我舉個例子,我要排範圍0 10的15個數。1 include 2 3using namespace std 45 intm...

非基於比較的排序 桶排序

我們最常用的快速排序和堆排序等演算法需要對序列中的資料進行比較,因為被稱為基於比較的排序。而非基於比較的排序有計數排序,桶排序,和在此基礎上的基數排序。要注意的是,非基於比較的排序演算法的使用都是有條件限制的,例如元素的大小限制。假設待排序資料是乙個隨機過程產生,該過程將元素一致地分布在某區間上。桶...