期末成績出來了,大白考了第4名,得了6 分,總分10分,回家媽媽打他了一頓:你看鄰居家的孩子考得多好呀!
家長會上,老師要求大家成績從低到高排序,前三名獎勵小紅花,大家如何排隊呢?
乙個蘿蔔乙個坑,首先要準備很多個坑,之後把對應的蘿蔔放進去,之後數一下那個坑里有蘿蔔就ok了!
我們可以使用乙個一維陣列解決這個問題。
陣列的長度為分數的範圍,這裡就是從0到10,等看完了就知道為什麼要這樣了。
首先申請乙個長度為11的陣列a[11],資料範圍為a[0]~a[10],將陣列全部初始化為0,表示這裡沒有人得過。
int a[11]=;
開始讀取每個人的分數(6,9,8,7,5),第乙個人的分數為6,將a[6]設定為1,表示有乙個人得了6分,同理將a[9]設定為1,表示有乙個人得了9分……其他同理
每個人的分數處理完成之後,遍歷下這個陣列,如果資料a[i]為0,表示沒有人得i分,否認就有,輸出i就可以了。
這裡是完整**,使用c語言
//輸入:6 9 8 7 5
//輸出:9 8 7 6 5
#include
int main()
//輸出結果
for (i = 0;i <= 10;i++)
for (j = 1;j <= a[i];j++)
printf("%d ", i);
//等待輸入,避免最終結果一閃而過
getchar();
return
0;}
該演算法於2023年由 harold h. seward 提出,距今已經n多年了,時間上只需要對陣列進行一次遍歷,複雜度o(n),時間表現很優秀;
空間上需要分配0~最大資料的空間,如果輸入資料為(1,2,3,10000),只有4個數,卻要分配a[10001],這麼多的空間!
計數排序就是用空間換時間!大量的空間占用當然就存在優化的空間!
第1節 乙個蘿蔔乙個坑 計數排序
上學時考試成績從高到低排序,前幾名會獲得小花花 剁手時,銷量從高到低排序,買銷量高的,群眾的眼睛是雪亮的,大家的選擇總沒錯,或者 從低到高排序,便宜才是硬到底!windows系統和os系統檔案按照檔名稱 時間排序同樣離不開!期末成績出來了,大白考了第4名,得了6 分,總分10分,回家媽媽打他了一頓 ...
啊哈C 學習6 5乙個蘿蔔乙個坑
2015年2月5日22 53 29 1.輸入n個0 1000的整數,將它們從小到大排序。如果想對1000以內的整數排序,我們需要1001個小房子來表示每個數出現的次數。include include int main printf 請輸入要排序的個數n scanf d itotal printf r...
Switch語句的乙個坑 乙個妙用
switch有乙個坑比較容易踩,在這裡記錄提醒自己。如下 請問輸出什麼?如果你覺得答案是 i 2那就錯了。要注意,switch語句到case語句之間的 是不會執行的。直接略過,所以case挨著switch寫好了 switch語句通常我們慣性思維case都是從下到大1 n種情況排列下來,不過不要忘記c...