排序總結 桶排序

2021-07-28 23:18:29 字數 1112 閱讀 9522

//

// created by liyuanshuo on 2017/3/18.

//#include #include "bucket_sort.h"

/* *

* 桶排序:

* 桶排序(bucket sort)假設輸入資料服從均勻分布,然後將輸入資料均勻地分配到有限數量的桶中,

* 然後對每個桶再分別排序,對每個桶再使用插入排序演算法,最後將每個桶中的資料有序的組合起來。

* 前面了解到基數排序假設輸入資料屬於乙個小區間內的整數,而桶排序則是假設輸入是由乙個隨機過程生成

* 該過程將元素均勻的分布在乙個區間[a,b]上。由於桶排序和計數排序一樣均對輸入的資料進行了某些假設限制

* 因此比一般的基於比較的排序演算法複雜度低。

* * 桶排序過程

* * 1.初始化裝入連續區間元素的n個桶,每個桶用來裝一段區間中的元素。

* * 2.遍歷待排序的資料,將其對映到對應的桶中,保證每個桶中的元素都在同乙個區間範圍中。

* * 3.對每個桶進行排序,最終將所有桶中排好序的元素連起來。

* ** 桶排序其中也蘊含著分治的策略,聯想之前的計數排序,基數排序就像是桶排序的乙個特例,乙個資料乙個桶

* 並且和雜湊(雜湊,hash)似乎也有千絲萬縷的關係。

* ** 總結: 桶排序的平均時間複雜度為線性的o(n+c),其中c=n*(logn-logm)。如果相對於同樣的n,桶數量m越

* 大,其效率越高,最好的時間複雜度達到o(n)。 當然桶排序的空間複雜度 為o(n+m),如果輸入資料非常龐大,

* 而桶的數量也非常多,則空間代價無疑是昂貴的。此外,桶排序是穩定的。

* */

typedef struct node

keynode;

void bucket_sort( int keys, int size, int bucket_size )

for (int j = 0; j < size; ++j)

else

node->next = p->next;

p->next = node;

(bucket_table[index]->key)++;

} }}

排序演算法總結 10 桶排序

桶排序假設待排序序列的元素服從 0 1 間的均勻分布,首先將區間 0 1 劃分成m個大小相同的子區間,或稱為桶。然後將所有元素放在各自所屬的區間中。因為序列是均勻分布的,所以各個區間中個元素個數相差不大。然後對每個區間的元素排列,可以用插入排序,因為元素較少,也可用快速排序。然後遍歷每個區間,將各個...

排序 桶排序

首先,桶排序是一種簡單並且執行快的一種排序。第一步,對五個數進行排序。程式如下 include using namespace std int main 首先對陣列進行歸零 for int j 1 j 5 j 將輸入的數的個數存入陣列中。for int k 1 k 10 k 執行原理 桶排序,就是先...

排序演算法 桶排序

桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...