例: 讓計算機隨機讀入 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的形式生成的,大概格式如圖 這次在自己的 機房收費系統 中設計報表,我使用...