桶排序,讓我明白了什麼是大道至簡。經過幾天的上課,自己也漸漸的對演算法產生了興趣,紅利是執行成功的那一刻心情是美好的。
對於一種演算法,常常我們一下子很難寫出**,這之間需要乙個過程,對演算法的規則的研究以及自己對演算法這個過程的描述。桶排序大道至簡在**呢?他的原理是這樣的,no1.準備好足夠用的桶,我們用陣列a(i)對桶進行編號;no2.將我們要排序的數和桶的下標對應起來,這是做乙個標記也可以說我們把數放在了下標裡。no3.我們遍歷每個桶,將做過標記的桶的下標進行輸出,即可完成排序。
那麼這個排序如何實現呢?背景介紹,有乙個文字框可以確定產生多少個數,接著我們可以對產生的數進行排序。首先簡單的描述一下:1.產生一定的數準備排序,
2. 遍歷產生的每乙個數,並將這些數和桶的下角標對應起來。3.對桶做標記,若桶的角標和要排序的數可以對應起來一次,我們標記這個桶 為1,對應了兩次,我們標記這個桶為2,為什麼要這樣呢?馬上你就會知道答 案的!
4.遍歷每乙個桶,根據桶標記的次數,我們輸出桶的下角標。
現在我們根據上面的描述,嘗試的寫一下,桶排序的**:
'隨機產生要排序的數
for i = 1 to val(text1.text)
v(i) = int(100 * rnd + 1)
p = p & v(i) & ","
next i '將產生的數對應上桶的下角標
for i = 1 to val(text1.text) 'text文字框用來確定產生隨機數的個數
t(v(i)) = t(v(i)) + 1 '將數放入桶的下角標,我們標記一次
next i
'遍歷每個桶,將下角標取出
for j = 1 to 100 '100是因為我們產生的是一百以內的隨機數,這裡可以自己定義
'判斷桶的標記的次數
if t(j) <> 0 then
for k = 1 to t(j)
m = m & j & "," '將桶的下角標取出
next k
end if
next j
桶排序讓我感受到了演算法的快樂,不過他也是有侷限性的,就是桶排序會造成有的桶沒有用上,造成一定的空間浪費,當然不可否認,桶排序的速度很快的,總之,這個演算法給我帶來了很多快樂!
排序 桶排序
首先,桶排序是一種簡單並且執行快的一種排序。第一步,對五個數進行排序。程式如下 include using namespace std int main 首先對陣列進行歸零 for int j 1 j 5 j 將輸入的數的個數存入陣列中。for int k 1 k 10 k 執行原理 桶排序,就是先...
排序演算法 桶排序
桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...
排序演算法 桶排序
2009 12 02 12 01 2817人閱讀 桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均...