桶式排序(bucket sort),是一種快速排序的演算法。如果我們有n個整數,範圍從1到m(或者是從0到m-1),對這n個整數進行排序。
(1)首先我們需要乙個放置所有桶的陣列bucketarray,陣列長度為m+1,初始化每個單元為0。
(2)遍歷n個整數,當讀到i時,使bucketarray[i]加1。
(3)在所有數讀完以後,掃瞄陣列bucketarray,列印排序好的表。
第(1)步中陣列長度可以替換為n個整數中最大數+1,因為這樣既可以保證桶的數量足夠,又可以在一定程度上節約空間。
具體實現如下(c++):
#include "stdafx.h"
#include "iostream"
using namespace std;
void bucket_sort(int *arr, int max, int size)
// 將排序好的資料輸出
for (int i = 0; i < max+1; i++) }
delete bucketarray;
}int main()
;
// 初始陣列長度
int size = sizeof(arr) / sizeof(int);
// 陣列中的最大值
int max = 425;
bucket_sort(arr, max, size);
return 0;
}
輸出:
112
45677425
請按任意鍵繼續. . .
不難看出,桶式排序的時間複雜度為o(n),但是當桶的數量比較大的時候是非常消耗空間的,可以說是一種犧牲空間換時間的演算法。 排序演算法之桶式排序
任何只是用比較的一般 通用排序演算法,最壞時間複雜度都大於等於nlogn 但是,在某些特殊條件限制下,以線性時間排序仍然是可能的 桶式排序,資料必須只有小於m的正整數組成。最壞時間複雜度n m 演算法描述 使用乙個大小為m的count陣列 count有m個桶 初始化為0 掃瞄一遍待排序序列,當讀pd...
排序演算法 桶排序
桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...
排序演算法 桶排序
2009 12 02 12 01 2817人閱讀 桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均...