題目連結(jié):
題目大意:
給定N(N ≦ 1, 000, 000),代表接下來(lái)有N個(gè)數(shù)字。每個(gè)數(shù)字只會(huì)是1、2或3。
把給定的N個(gè)數(shù)字由小排到大輸出。
解題思維:
雖然這題可以直接呼叫內(nèi)建的sort()函式,就可以過(guò)了。
但是現(xiàn)在要介紹一下一個(gè)排序的演算法,叫做——Counting Sort。
顧名思義,用數(shù)的去「排序」。有時(shí)候已知數(shù)字的範(fàn)圍,就可以直接開(kāi)相應(yīng)大小的陣列(當(dāng)然,太大就不適用了),然後出現(xiàn)什麼數(shù)字就把在相應(yīng)陣列位置的值+1(本來(lái)都是0)。
然後在輸入結(jié)束後,用迴圈由小跑到大的數(shù)字(因?yàn)楣?fàn)圍已知)。有曾經(jīng)出現(xiàn)過(guò)的數(shù)字,就輸出相應(yīng)的次數(shù)。
雖然這演算法會(huì)消耗不少記憶體空間,但是在時(shí)間層面確實(shí)是數(shù)一數(shù)二地快(跟資料數(shù)量N和範(fàn)圍M成正比,即時(shí)間複雜度為O(N+M)),並不失為一個(gè)好的排序手段。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。