排序演算法之八 桶排序 C 版本

2021-09-29 19:07:42 字數 2240 閱讀 5635

實現中,使用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 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 根據最大值最小值建立多個桶,確定各個桶之間的跨度,然後遍歷原始數列,把各元素放到對應的桶中,先是每個桶內的元素...