第1節 乙個蘿蔔乙個坑 計數排序

2021-08-20 02:17:05 字數 961 閱讀 8974

期末成績出來了,大白考了第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...