桶排序假設待排序序列的元素服從[0
,1) 間的均勻分布,首先將區間[0
,1) 劃分成m個大小相同的子區間,或稱為桶。然後將所有元素放在各自所屬的區間中。因為序列是均勻分布的,所以各個區間中個元素個數相差不大。然後對每個區間的元素排列,可以用插入排序,因為元素較少,也可用快速排序。然後遍歷每個區間,將各個區間的元素遍歷即可。這裡的區間可以成為桶,所以叫桶排序。
同理,可以對任意有限範圍內的元素桶排序,只需要將其所在大區間分成m個小區間。元素的均勻分布和m取值大小決定了桶排序的效能。
桶排序中將所有元素放在其所在的區間中這一做法,其實是將原問題分解成小問題,然後再合併。和歸併排序,快速排序的思想一致,不過元素對映到子問題的方式不一樣。
bucketsort(a,m,min,max)
//a是帶排序序列,m是桶的個數,min是序列中的最小值,max是序列中的最大值
初始化m個桶
for i=0
to a.length-1
將a[i]插入第 (a[i]-mim)*m/(max-min+1)個桶中
for i=0
to m-1
對第i個桶排序
遍歷第i個桶將元素放在輸出系列中
public
static
void
bucketsort(int a,int m,int min,int max)
//將序列中的元素插入到對應的桶中
for(int j=0;jint bindex=(a[j]-min)*m/(max-min+1);
buckets.get(bindex).add(a[j]);
}int index=0;
for(int k=0;kint array=new
int [buckets.get(k).size()];
for(int j=0;jget(k).get(j);
}insertionsort(array);
for (int i = 0; i < array.length; i++)
}}
1、m的值影響桶排序的效能。m=1時,沒有將序列分組,即使用插入排序或快速排序;當m=max-min+1時,每個桶裡至多有乙個元素。但是桶排序需要額外的空間,m越大,需要越多輔助空間。所有選擇m需要衡量時間和空間複雜度。
2、待排序列是否在區間內均勻分布直接影響了桶排序的效能。
3、桶排序的平均時間複雜度為線性的o(n+c),其中c為桶內排序的時間複雜度。如果相對於同樣的n,桶數量m越大,其效率越高,最好的時間複雜度達到o(n)。 當然桶排序的空間複雜度 為o(n+m),如果輸入資料非常龐大,而桶的數量也非常多,則空間代價無疑是昂貴的。
排序總結 桶排序
created by liyuanshuo on 2017 3 18.include include bucket sort.h 桶排序 桶排序 bucket sort 假設輸入資料服從均勻分布,然後將輸入資料均勻地分配到有限數量的桶中,然後對每個桶再分別排序,對每個桶再使用插入排序演算法,最後將每...
排序演算法 桶排序
桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...
排序演算法 桶排序
2009 12 02 12 01 2817人閱讀 桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均...