任務:使用桶排序將陣列從大到小排列。
原始陣列:
先迴圈陣列,取出陣列最大值17與最小值3,計算最大值與最小值的差值,以差值除以陣列長度,再加一得到桶的數量:(17 - 3) / 10 + 1 = 2。
迴圈陣列放到桶裡,結果:
然後針對各個桶內資料進行排序。
然後按順序取出各桶的結果。
public static void bucketsort(int array)
// 桶數:(max - min) / array.length的結果為陣列大小的倍數(最大倍數),以倍數作為桶數
int bucketnum = (max - min) / array.length + 1;
system.out.println(bucketnum);
// 初始化桶
arraylist> bucketarr = new arraylist<>(bucketnum);
for (int i = 0; i < bucketnum; i++)
// 將每個元素放入桶
for (int i = 0; i < array.length; i++)
// 對每個桶進行排序
for (int i = 0; i < bucketarr.size(); i++)
// 合併資料
int j = array.length - 1;
for (arraylisttemplist : bucketarr) }}
時間複雜度:桶排序的時間複雜度不僅跟陣列長度有關,還跟分配的桶數相關。設陣列長度是n,桶數為m。則桶排序的時間複雜度為o(n * log(n/m) + n)。在n與m相等的時候,桶排序的效率達到最好到o(n),但是這只在空間一定大小,且資料均勻分不到每個桶內才成立。
空間複雜度:因為計數排序需要新建乙個長度為k個桶。所以計數排序的空間複雜度為o(k)。
穩定性:穩定。
排序演算法之桶排序
1 設定乙個定量的陣列當作空桶子 2 尋訪序列,並且按照要求把記錄乙個乙個放到對應的桶子去 3 對每個不是空的桶子進行排序。4 從不是空的桶子裡把專案再放回原來的序列中。include include include include typedef struct node node,list voi...
排序演算法之桶排序
桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 根據最大值最小值建立多個桶,確定各個桶之間的跨度,然後遍歷原始數列,把各元素放到對應的桶中,先是每個桶內的元素...
排序演算法之桶排序
桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...