啊哈演算法 之 簡單的桶排序

2021-06-26 10:26:35 字數 1125 閱讀 7109

從今天起要開始攻讀《啊哈,演算法》這本最初級的演算法書了,計畫一周之內讀完。

第乙個演算法 桶排序。

這個演算法就好比有很多個桶,每出現乙個數就在他對應的桶中插乙個小旗子,最後數數每個桶中有幾個小旗子就ok了,這樣就能正確的輸出排序後的數了。

下面我們舉個例子,來說明一下該演算法的實現原理。

期末考試完了,老師要根據同學們的分數進行從高到低進行排序,這五個同學的分數分別是,5,3,5,2,8,哎。考的慘不忍睹(最高10分),下面我們要用桶排序進行排序,排序後的輸出應該是 8 5 5 3 2 。

首先我們要申請乙個大小為11的陣列,把a[0] -- a[10]都初始化為0,表示分數還沒有人得過。例如a[0] 等於0 說明沒人得到0分,以此類推,a[1] 等於1 表示有乙個人得了1分。下面我們就將五個人的分數一次賦值給陣列a。第一位同學為5分,那麼a[5]的值+1,第二位同學為3分,a[3]的值+1,第三位。。。。。。

#include int main(int argc, const char * argv)

for (i = 1; i <= 5; i++)

for (int i = 0; i < 11; i++)

}printf("\n");

return 0;

}

上面就是**實現了,結合注釋,大家理解起來應該沒什麼難度。

第乙個for迴圈了 11次,加上 int m = 11,就是m次,第二for迴圈了迴圈了5次,加上 int n =5就是n次,第三個,第四個for迴圈就是一共迴圈了  m+n次,所以該演算法的時間複雜度為: m+n+m+n次,我們用大寫字母o來表示時間複雜度,那麼該演算法的時間複雜度為o(m+n+m+n)即o(2*(m+n)),我們在計算時間複雜度的時候可以省略較小的常數,所以該演算法的時間複雜度就是o(m+n),還有一點表示時間複雜度是時候,一般m 和 n都用大寫表示,即: o(m+n)。

同排序的優點,大家可以通過時間複雜度的可以看出,該演算法是非常快的,相比大家比較熟悉的氣泡排序,要快很多很多。但是該演算法的缺點同樣明顯,那就是太浪費空間了,例如你要對20000000個數進行排序,那麼你就要申請20000000的陣列來儲存這些數,這無疑是非常浪費記憶體的。所以,具體應用場景還要大家根據自己的實際情況進行選擇,到底應該是以空間換效率還是以效率換空間。

啊哈演算法 桶排序

桶排序 include includeint main for i 0 i 10 i 依次判斷a 0 a 10 for j 1 j a i j 出現了幾次就列印幾次 printf d i system pause return 0 2019.10.7 不是很懂那個依次判斷a 0 a 10 出現了幾次...

啊哈磊 演算法1 簡單桶排序

include int main for i 0 i 10 i 依次判斷a 0 a 10 for j 1 j a i j 出現了幾次就列印幾次 printf d i getchar getchar 這裡的getchar 用來暫停程式,以便檢視程式輸出的內容 也可以用system pause 等來代替...

啊哈!演算法 第01節 桶排序

在我們生活的這個世界中到處都是被排序過的東東。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照 排序,電子郵箱中的郵件按照時間排序 總之很多東東都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。首先出場的是我們的主人公小哼,上面這個可愛的娃就是啦...