[μ λ ¬] 8. ν μ΄λ μ΄ν΄νλ κ³μ μ λ ¬(Counting Sort)
κ³μ μ λ ¬
: μ£Όμ΄μ§ λ°°μ΄μ κ°μ λ²μκ° μμ κ²½μ° λΉ λ₯Έ μλλ₯Ό κ°λ μ λ ¬ μκ³ λ¦¬μ¦μ΄λ€.
μ΅λκ°κ³Ό μ λ ₯ λ°°μ΄μ μμ κ° κ°μλ₯Ό λμ ν©μΌλ‘ ꡬμ±ν λ°°μ΄λ‘ μ λ ¬μ μννλ€.
μ°μ , μ΄ν΄νκΈ° μ½κ²
nums = [5, 9, 3, 6, 9, 5, 2, 10, 1] μ΄λΌλ λ°°μ΄μ΄ μ λ ₯λμκ³ , μ΄ nums λ°°μ΄μ μ λ ¬νλ€κ³ ν΄λ³΄μ.
μΉ΄μ΄ν μ λ ¬μ λ¨κ³
0. μ λ ¬ν nums λ°°μ΄ μ λ ₯
1. count λ°°μ΄ μμ±
- μ λ ₯λ nums λ°°μ΄μ μ΅λκ°μ κΈΈμ΄λ‘ κ°λ count λ°°μ΄μ μμ±νλ€.
- κ° μμκ° nums λ°°μ΄μ λͺ λ² λμ€λμ§ νμλ₯Ό count λ°°μ΄μ κΈ°λ‘νλ€.
2. μ΄μ κΉμ§μ λμ κ°μλ₯Ό κΈ°λ‘νλ λ°°μ΄ μμ±(cumCount λ°°μ΄)
- count λ°°μ΄μμ κ° μμκ° λͺ κ°μ© λμ€λμ§ μ μ μμΌλ―λ‘,
- μ΄λ₯Ό μ΄μ©ν΄ μ§κΈκΉμ§ λͺκ°μ μμκ° μμ λμλμ§λ₯Ό κΈ°λ‘νλ λμ κ°μ λ°°μ΄μ μμ±νλ€.
3. nums λ°°μ΄μμ 첫λ²μ§Έ μμλΆν° cumCount λ°°μ΄μ κΈ°λ‘λμ΄ μλ κ°μ λ°λΌ μΈλ±μ€ μμΉλ₯Ό μ νλ©΄ λ!
μκ° λ³΅μ‘λ
:
λ§μ½ μ΅λκ°μ΄ μ£Όμ΄μ§μ§ μμ κ²½μ°, μ 체 λ°°μ΄μ νμν΄μΌ νλ―λ‘ O(n) μμ,
Count λ°°μ΄ μμ±νλ©΄μ κ°―μλ₯Ό μΈλ κ³Όμ O(n) μμ,
λμ λ°°μ΄μ μμ±νλ©΄μ λμ κ°―μλ₯Ό μΈλ κ³Όμ O(n) μμ
λ§μ§λ§μΌλ‘ answerμ λ°°μ΄μ κ°μ μ λ ₯νλ κ³Όμ O(n) μμ
λ°λΌμ μκ° λ³΅μ‘λλ O(n)μ΄ λλ€.
νμ§λ§, λ°°μ΄μ κΈΈμ΄μλ λ 립μ μΌλ‘ λ°°μ΄μ μ΅λκ°μ Mμ΄λΌκ³ νλ€λ©΄, μ λ ¬ μκ°μ Mμ λ°λΌκ°κ² λ κ²μ΄λ€.
λ°λΌμ O(n + M) μ΄λΌκ³ 보λ κ²μ΄ μ νν΄ λ³΄μΈλ€.
κ³Όμ μμ μ μ μλ―μ΄ μ΅λκ°μ΄ μμΌλ©΄ μμμλ‘ μ λ ¬μ μ 리νλ€.