簡化版桶排序

2021-10-02 22:47:32 字數 1927 閱讀 2476

例: 讓計算機隨機讀入 5個數然後將這 5個數從大到小輸出

輸入:5 3 5 2 8

輸出:8 5 5 3 2

思路:

先申請乙個大小為 11 的陣列 int a[11];現在你已經有了 11 個變數,編號從 a[0]~a[10]。

剛開始,我們將 a[0]~a[10]都初始化為 0,表示這些0~10的數字還沒出現過。例如:a[0]= 0就表示目前0數字出現0次, a[1]=0就表示目前1數字出現0次……a[10]等於 0就表示目前10數字出現0次 。

a[0]為 0,表示「0」沒有出現過,不列印;

a[1]為 0,表示「1」沒有出現過,不列印;

a[2]為 1,表示「2」出現過 1次,列印 2;

a[3]為 1,表示「3」出現過 1次,列印 3;

a[4]為 0,表示「4」沒有出現過,不列印;

a[5]為 2,表示「5」出現過 2次,列印 5 5;

a[6]為 0,表示「6」沒有出現過,不列印;

a[7]為 0,表示「7」沒有出現過,不列印;

a[8]為 1,表示「8」出現過 1次,列印 8;

a[9]為 0,表示「9」沒有出現過,不列印;

a[10]為 0,表示「10」沒有出現過,不列印;

輸出「2 3 5 5 8」,完整的**如下:

#

include

intmain()

for(i=

0; i<=

10; i++

)//第二個for語句:如果可以執行,執行一次列印一次,j++,回頭再判斷j<=a[i]?

// 直到不能執行跳出,執行 第乙個for語句

}getchar()

;getchar()

;//這裡的getchar();用來暫停程式,以便檢視程式輸出的內容

//也可以用system("pause");等來代替

return0;

}輸出:855

32```c

#include

intmain()

for(i=

1000

;i>=

0;i--

)//依次判斷編號1000~0的桶

for(j=

1;j<=book[i]

;j++

)//出現了幾次就將桶的編號列印幾次

printf

("%d "

,i);

getchar()

;getchar()

;return0;

}

輸入:10 (代表有十個數輸入)

8 100 50 22 15 6 1 1000 999 0

輸出:1000 999 100 50 22 15 8 6 1 0

```c

#include int main() **//迴圈n次**

for(i=1000; i>=0; i--) //依次判斷編號1000~0的桶

for(j=1; j<=book[i]; j++) //出現了幾次就將桶的編號列印幾次

printf("%d ",i); **//循換(1001+n)次**

getchar();

getchar();

return 0;

} //整個排序迴圈2*(1001+n)次

時間複雜度:

o(2*(m+n));*(m 是申請的陣列大小,n是待排序的個數)

//o(m+n)。

演算法之排序0 簡化版桶排序

看了 啊哈!演算法 一書,打算寫點讀書筆記,記錄一下。先說說桶排序,先說說超級簡化版本的桶排序 簡化桶排序,以簡單的整型為例,數值是多少,就在陣列下標相同 桶 的數加一 例如取到數13,那麼就a 13 然後迴圈桶,輸出值大於0的角標 1輸出1次,2輸出2次 public static void to...

最快最簡單的排序(之二) 桶排序(簡化版)

1.簡介 從前面的氣泡排序可以發現乙個問題,即使只有乙個數沒排好序,氣泡排序都要把所有相鄰的數進行遍歷一遍!這樣效率就變的很低了!特別是在數非常多時就更加明顯!下面就來介紹一種比較高效的排序方法 桶排序 注意 橢圓裡面的數,就是用於排序的數!長方形陣列就是用來記錄同樣的數出現了幾次。橢圓裡面的每個數...

報表製作簡化版

機房收費系統無論是重構還是第一版,都用到了報表,為什麼在乙個系統中要新增報表呢?報表的作用是什麼呢?報表百科。我理解的報表是 向上級報告情況的乙個媒介,沒有固定的格式。之前在專案中,我們真正給企業做過一次報表,是以匯出word的形式生成的,大概格式如圖 這次在自己的 機房收費系統 中設計報表,我使用...