實現中,使用vector作為桶,只是從編碼便利的角度出發。
因為需要對各個桶進行單獨排序,所以,對桶進行的排序演算法是否穩定,影響了整個演算法的穩定性,這裡使用的是sort演算法,因此整個演算法就是不穩定的。
void
bucketsort
(int
* pdata,
int size)
// 建立桶
int bucketcount =
(maxdata - mindata)
/ size +1;
// 桶數計算公式
std::vectorint>> buckets;
// 向桶中插入資料
for(
int idx =
0; idx < size;
++idx)
// 各個桶就行排序
for(
int idx =
0; idx < bucketcount;
++idx)
// 將桶中資料寫回原陣列
for(
int idx =
0, curidx =
0; idx < bucketcount;
++idx)
}
加上相關的輸出資訊後再進行呼叫。
輔助函式
void
print
(int
* pdata,
int size)
初始資料為
int datas[6]
=;
輸出版本
void
bucketsort_output
(int
* pdata,
int size)
// 建立桶
int bucketcount =
(maxdata - mindata)
/ size +1;
// 桶數計算公式
std::vectorint>>
buckets
(bucketcount)
;// 向桶中插入資料
for(
int idx =
0; idx < size;
++idx)
// 輸出各桶中的資料
for(
int idx =
0; idx < bucketcount;
++idx)
// 各個桶進行排序
for(
int idx =
0; idx < bucketcount;
++idx)
// 將桶中資料寫回原陣列
for(
int idx =
0, curidx =
0; idx < bucketcount;
++idx)
std::cout << std::endl <<
"final data"
<< std::endl;
print
(pdata, size)
;}
呼叫輸出
init data // 初始資料12
3216
1020
3015
1860
55bucket 0 data // 0號桶中資料12
3216
10bucket 1 data// 1號桶中資料
2015
18bucket 2 data// 2號桶中資料
30bucket 3 data// 3號桶中資料
bucket 4 data// 4號桶中資料
6055
sort bucket 0 data// 排序後0號桶中資料11
2236
10sort bucket 1 data// 排序後1號桶中資料
1518
20sort bucket 2 data// 排序後2號桶中資料
30sort bucket 4 data// 排序後3號桶中資料
5560
final data // 最終資料11
2236
1015
1820
3055s 60
八大排序演算法(八)桶排序
說基數排序之前,我們先說桶排序 基本思想 是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不是 比較排序,他不受到 o n l...
排序演算法之桶排序
1 設定乙個定量的陣列當作空桶子 2 尋訪序列,並且按照要求把記錄乙個乙個放到對應的桶子去 3 對每個不是空的桶子進行排序。4 從不是空的桶子裡把專案再放回原來的序列中。include include include include typedef struct node node,list voi...
排序演算法之桶排序
桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 根據最大值最小值建立多個桶,確定各個桶之間的跨度,然後遍歷原始數列,把各元素放到對應的桶中,先是每個桶內的元素...