日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

桶排序 Bin Sort

發(fā)布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 桶排序 Bin Sort 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

桶排序 Bin Sort

平均情況下桶排序以線性時間運行。像計數(shù)排序一樣,桶排序也對輸入作了某種假設(shè), 因而運行得很快。具體來說,計數(shù)排序假設(shè)輸入是由一個小范圍內(nèi)的整數(shù)構(gòu)成,而桶排序則 假設(shè)輸入由一個隨機過程產(chǎn)生,該過程將元素一致地分布在區(qū)間[0,1)上。

桶排序的思想就是把區(qū)間[0,1)劃分成n個相同大小的子區(qū)間,或稱桶,然后將n個輸入數(shù)分布到各個桶中去。因為輸入數(shù)均勻分布在[0,1)上,所以一般不會有很多數(shù)落在 一個桶中的情況。為得到結(jié)果,先對各個桶中的數(shù)進行排序,然后按次序把各桶中的元素列 出來即可。

在桶排序算法的代碼中,假設(shè)輸入是個含n個元素的數(shù)組A,且每個元素滿足0≤ A[i]<1。另外還需要一個輔助數(shù)組B[O..n-1]來存放鏈表實現(xiàn)的桶,并假設(shè)可以用某種機制來維護這些表。

桶排序的算法如下,其中floor(x)是地板函數(shù),表示不超過x的最大整數(shù)。

procedure Bin_Sort(var A:List); begin 1 n:=length(A); 2 for i:=1 to n do 3 將A[i]插到表B[floor(n*A[i])]中; 4 for i:=0 to n-1 do 5 用插入排序?qū)Ρ鞡[i]進行排序; 6 將表B[0],B[1],...,B[n-1]按順序合并; end;

?

圖1 Bin_Sort的操作

圖1演示了桶排序作用于有10個數(shù)的輸入數(shù)組上的操作過程。(a)輸入數(shù)組A[1..10]。(b)在該算法的第5行后的有序表(桶)數(shù)組B[0..9]。桶i中存放了區(qū)間[i/10,(i+1)/10]上的值。排序輸出由表B[O]、B[1]、...、B[9]的按序并置構(gòu)成。

要說明這個算法能證確地工作,看兩個元素A[i]和A[j]。如果它們落在同一個桶中,則它們在輸出序列中有著正確的相對次序,因為它們所在的桶是采用插入排序的。現(xiàn)假設(shè)它們落到不同的桶中,設(shè)分別為B[i']和B[j']。不失一般性,假設(shè)i'<j'。在算法的代碼中,當?shù)?行中將B中的表并置起來時,桶B[i']中的元素先于桶B[j']中的元素,因而在輸出序列中A[i]先于A[j]。現(xiàn)在要證明A[i]≤A[j]。假設(shè)情況正好相反,我們有:

?i'=floor(n*A[i])≥floor(n*A[j])=j'

得矛盾 (因為i'<j'),從而證明桶排序能正確地工作。

現(xiàn)在來分析算法的運行時間。除第5行外,所有各行在最壞情況的時間都是O(n)。第5行中檢查所有桶的時間是O(n)。分析中唯一有趣的部分就在于第5行中插人排序所花的時間。

為分析插人排序的時間代價,設(shè)ni為表示桶B[i]中元素個數(shù)的隨機變量。因為插入排序以二次時間運行,故為排序桶B[i]中元素的期望時間為E[O(ni2)]=O(E[ni2]),對各個桶中的所有元素排序的總期望時間為:

(1)

為了求這個和式,要確定每個隨機變量ni的分布。我們共有n個元素,n個桶。某個元素落到桶B[i]的概率為l/n,因為每個桶對應于區(qū)間[0,1)的l/n。這種情況與投球的例子很類似:有n個球 (元素)和n個盒子 (桶),每次投球都是獨立的,且以概率p=1/n落到任一桶中。這樣,ni=k的概率就服從二項分布B(k;n,p),其期望值為E[ni]=np=1,方差V[ni]=np(1-p)=1-1/n。對任意隨機變量X,有:

  (2)

將這個界用到(1)式上,得出桶排序中的插人排序的期望運行時間為O(n)。因而,整個桶排序的期望運行時間就是線性的。

下面的Java Applet程序演示了桶排序的基本思想。

很抱歉,您的瀏覽器不支持Java Applet或者沒有打開Java Applet支持。

在該演示程序中,線性表的元素類型為整型,桶的標號為整數(shù),算法將值為i的元素放入標號為i的桶中,再按照桶的標號的順序?qū)⒃匾来稳〕?#xff0c;就得到了最終的排序結(jié)果。

返回頁首


本頁最后一次更新于10/13/2003
Email: Starfish.H@China.com
?2000 算法與數(shù)據(jù)結(jié)構(gòu) http://algorithm.126.com/ 版權(quán)所有 轉(zhuǎn)載請保留出處

總結(jié)

以上是生活随笔為你收集整理的桶排序 Bin Sort的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。