計數(shù)排序
算法步驟
計數(shù)排序的算法步驟如下:
找出待排序的數(shù)組中最大和最小的元素。
統(tǒng)計數(shù)組中每個值為 i 的元素出現(xiàn)的次數(shù),存入新數(shù)組 C 的第 i 項。
對所有的計數(shù)累加(從 C 中的第一個元素開始,每一項和前一項相加)。
反向填充目標(biāo)數(shù)組 B:將每個元素 i 放在新數(shù)組 B 中的第 C(i) 項,每放一個元素就將 C(i) 減去 1。
示例代碼
數(shù)組
[5, 3, 8, 2, 1, 4]
中最小值為 1,最大值為 8。創(chuàng)建一個長度為
max - min + 1
的計數(shù)數(shù)組countArr
,此時countArr
的初始狀態(tài)為[0, 0, 0, 0, 0, 0, 0, 0]
。統(tǒng)計每個元素出現(xiàn)的次數(shù),遍歷原始數(shù)組,將每個元素減去最小值作為索引,并將對應(yīng)位置的計數(shù)加一。統(tǒng)計結(jié)束后,
countArr
的狀態(tài)為[1, 1, 1, 1, 1, 0, 0, 1]
。累加計數(shù)數(shù)組,從第二個元素開始,每個元素的值等于前一個元素值加當(dāng)前元素值。累加結(jié)束后,
countArr
的狀態(tài)為[1, 2, 3, 4, 5, 5, 5, 6]
。創(chuàng)建一個新數(shù)組
sortedArr
,長度與原始數(shù)組相同。反向遍歷原始數(shù)組,將每個元素在
countArr
中的值減一作為索引,并將對應(yīng)位置的元素放入sortedArr
。同時,將對應(yīng)位置的計數(shù)減一。最終得到排序后的數(shù)組sortedArr
。