ν΅ μ λ ¬κ³Ό λ³ν© μ λ ¬ μκ³ λ¦¬μ¦μ μ±λ₯, 볡μ‘λ, μ μΈκ³ κ°λ°μλ₯Ό μν μ΅μ μ μ¬μ© μ¬λ‘λ₯Ό νꡬνλ μμΈ λΉκ΅ λΆμ.
μ λ ¬ λκ²°: ν΅ μ λ ¬ vs. λ³ν© μ λ ¬ - μ¬μΈ΅ κΈλ‘λ² λΆμ
μ λ ¬μ μ»΄ν¨ν° κ³Όνμ κΈ°λ³Έμ μΈ μ°μ°μ λλ€. λ°μ΄ν°λ² μ΄μ€ μ 리λΆν° κ²μ μμ§ κ΅¬λμ μ΄λ₯΄κΈ°κΉμ§, ν¨μ¨μ μΈ μ λ ¬ μκ³ λ¦¬μ¦μ κ΄λ²μν μ ν리μΌμ΄μ μ νμμ μ λλ€. κ°μ₯ λ리 μ¬μ©λκ³ μ°κ΅¬λλ λ κ°μ§ μ λ ¬ μκ³ λ¦¬μ¦μ ν΅ μ λ ¬(Quick Sort)κ³Ό λ³ν© μ λ ¬(Merge Sort)μ λλ€. μ΄ κΈμμλ μ΄ λ κ°λ ₯ν μκ³ λ¦¬μ¦μ κ°μ , μ½μ , κ·Έλ¦¬κ³ κΈλ‘λ² λ§₯λ½μμμ μ΅μ μ¬μ© μ¬λ‘λ₯Ό νꡬνλ©° μ’ ν©μ μΌλ‘ λΉκ΅ν©λλ€.
μ λ ¬ μκ³ λ¦¬μ¦μ μ΄ν΄
μ λ ¬ μκ³ λ¦¬μ¦μ νλͺ©λ€μ λͺ¨μ(μ: μ«μ, λ¬Έμμ΄, κ°μ²΄)μ μ€λ¦μ°¨μμ΄λ λ΄λ¦Όμ°¨μκ³Ό κ°μ νΉμ μμλ‘ μ¬λ°°μ΄ν©λλ€. μ λ ¬ μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ νΉν λκ·λͺ¨ λ°μ΄ν°μ μ λ€λ£° λ λ§€μ° μ€μν©λλ€. ν¨μ¨μ±μ μΌλ°μ μΌλ‘ λ€μ κΈ°μ€μΌλ‘ μΈ‘μ λ©λλ€:
- μκ° λ³΅μ‘λ: μ λ ₯ ν¬κΈ°κ° μ¦κ°ν¨μ λ°λΌ μ€ν μκ°μ΄ μ΄λ»κ² μ¦κ°νλμ§λ₯Ό λνλ λλ€. λΉ μ€ νκΈ°λ²(μ: O(n log n), O(n2))μ μ¬μ©νμ¬ ννν©λλ€.
- κ³΅κ° λ³΅μ‘λ: μκ³ λ¦¬μ¦μ΄ νμλ‘ νλ μΆκ°μ μΈ λ©λͺ¨λ¦¬μ μμ λλ€.
- μμ μ±: μκ³ λ¦¬μ¦μ΄ λμΌν κ°μ μμλ€μ μλμ μΈ μμλ₯Ό 보쑴νλμ§ μ¬λΆμ λλ€.
ν΅ μ λ ¬: μ μ¬μ μνμ μ§λ λΆν μ 볡
κ°μ
ν΅ μ λ ¬μ λΆν μ 볡 ν¨λ¬λ€μμ μ¬μ©νλ λ§€μ° ν¨μ¨μ μΈ μ μ리 μ λ ¬(in-place) μκ³ λ¦¬μ¦μ λλ€. λ°°μ΄μμ 'νΌλ²' μμλ₯Ό μ ννκ³ , λ€λ₯Έ μμλ€μ νΌλ²λ³΄λ€ μμμ§ ν°μ§μ λ°λΌ λ κ°μ νμ λ°°μ΄λ‘ λΆν νλ λ°©μμΌλ‘ μλν©λλ€. κ·Έλ° λ€μ νμ λ°°μ΄λ€μ μ¬κ·μ μΌλ‘ μ λ ¬λ©λλ€.
μκ³ λ¦¬μ¦ λ¨κ³
- νΌλ² μ ν: λ°°μ΄μμ νΌλ²μΌλ‘ μ¬μ©ν μμλ₯Ό μ νν©λλ€. μΌλ°μ μΈ μ λ΅μΌλ‘λ 첫 λ²μ§Έ μμ, λ§μ§λ§ μμ, 무μμ μμ λλ μΈ μμμ μ€κ°κ°μ μ ννλ λ°©λ²μ΄ μμ΅λλ€.
- λΆν : νΌλ²λ³΄λ€ μμ λͺ¨λ μμλ νΌλ² μμ, νΌλ²λ³΄λ€ ν° λͺ¨λ μμλ νΌλ² λ€μ μ€λλ‘ λ°°μ΄μ μ¬λ°°μ΄ν©λλ€. μ΄μ νΌλ²μ μ΅μ’ μ λ ¬λ μμΉμ μκ² λ©λλ€.
- μ¬κ·μ μ λ ¬: νΌλ²μ μΌμͺ½κ³Ό μ€λ₯Έμͺ½μ μλ νμ λ°°μ΄μ λν΄ 1λ¨κ³μ 2λ¨κ³λ₯Ό μ¬κ·μ μΌλ‘ μ μ©ν©λλ€.
μμ
κ°λ¨ν μμλ‘ ν΅ μ λ ¬μ μ€λͺ ν΄ λ³΄κ² μ΅λλ€. λ°°μ΄ [7, 2, 1, 6, 8, 5, 3, 4]λ₯Ό μκ°ν΄ 보μΈμ. λ§μ§λ§ μμμΈ 4λ₯Ό νΌλ²μΌλ‘ μ ννκ² μ΅λλ€.
첫 λ²μ§Έ λΆν ν, λ°°μ΄μ [2, 1, 3, 4, 8, 5, 7, 6]κ³Ό κ°μ΄ λ³΄μΌ μ μμ΅λλ€. νΌλ²(4)μ μ΄μ μ¬λ°λ₯Έ μμΉμ μμ΅λλ€. κ·Έλ° λ€μ [2, 1, 3]κ³Ό [8, 5, 7, 6]μ μ¬κ·μ μΌλ‘ μ λ ¬ν©λλ€.
μκ° λ³΅μ‘λ
- μ΅μμ κ²½μ°: O(n log n) β νΌλ²μ΄ λ°°μ΄μ μ§μμ μΌλ‘ κ±°μ λμΌν ν¬κΈ°μ λ λΆλΆμΌλ‘ λλ λ λ°μν©λλ€.
- νκ· μ μΈ κ²½μ°: O(n log n) β νκ· μ μΌλ‘ ν΅ μ λ ¬μ λ§€μ° μ’μ μ±λ₯μ 보μ λλ€.
- μ΅μ μ κ²½μ°: O(n2) β νΌλ²μ΄ μ§μμ μΌλ‘ λ§€μ° λΆκ· νν λΆν μ μ΄λν λ λ°μν©λλ€(μ: λ°°μ΄μ΄ μ΄λ―Έ μ λ ¬λμκ±°λ κ±°μ μ λ ¬λ μνμμ 첫 λ²μ§Έ λλ λ§μ§λ§ μμλ₯Ό νμ νΌλ²μΌλ‘ μ ννλ κ²½μ°).
κ³΅κ° λ³΅μ‘λ
- μ΅μ μ κ²½μ°: O(n) β μ¬κ· νΈμΆ λλ¬Έμ λ°μν©λλ€. μ΄λ 꼬리 νΈμΆ μ΅μ νλ λ°λ³΅μ ꡬνμ ν΅ν΄ O(log n)μΌλ‘ μ€μΌ μ μμ΅λλ€.
- νκ· μ μΈ κ²½μ°: O(log n) β κ· ν μ‘ν λΆν μμλ νΈμΆ μ€νμ κΉμ΄κ° λ‘κ·Έμ μΌλ‘ μ¦κ°ν©λλ€.
ν΅ μ λ ¬μ μ₯μ
- μΌλ°μ μΌλ‘ λΉ λ¦: νκ· μ μΈ κ²½μ°μ μ±λ₯μ΄ μ°μνμ¬ λ§μ μ ν리μΌμ΄μ μ μ ν©ν©λλ€.
- μ μ리 μ λ ¬(In-Place): μ΅μνμ μΆκ° λ©λͺ¨λ¦¬λ§ νμν©λλ€(μ΅μ ν μ μ΄μμ μΌλ‘ O(log n)).
ν΅ μ λ ¬μ λ¨μ
- μ΅μ μ κ²½μ° μ±λ₯: O(n2)μΌλ‘ μ±λ₯μ΄ μ νλ μ μμ΄ μ΅μ μ κ²½μ°λ₯Ό 보μ₯ν΄μΌ νλ μλ리μ€μλ λΆμ ν©ν©λλ€.
- λΆμμ μ±: λμΌν κ°μ μμλ€μ μλμ μΈ μμλ₯Ό 보쑴νμ§ μμ΅λλ€.
- νΌλ² μ νμ λν λ―Όκ°μ±: μ±λ₯μ΄ νΌλ² μ ν μ λ΅μ ν¬κ² μμ‘΄ν©λλ€.
νΌλ² μ ν μ λ΅
νΌλ²μ μ νμ ν΅ μ λ ¬μ μ±λ₯μ ν° μν₯μ λ―ΈμΉ©λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ μ λ΅μ λλ€:
- 첫 λ²μ§Έ μμ: κ°λ¨νμ§λ§, μ λ ¬λκ±°λ κ±°μ μ λ ¬λ λ°μ΄ν°μμ μ΅μ μ κ²½μ°λ₯Ό λ³΄μΌ μ μμ΅λλ€.
- λ§μ§λ§ μμ: 첫 λ²μ§Έ μμμ μ μ¬νλ©°, μμ μ΅μ μ μλ리μ€μ μ·¨μ½ν©λλ€.
- 무μμ μμ: 무μμμ±μ λμ νμ¬ μ΅μ μ κ²½μ° λ°μ κ°λ₯μ±μ μ€μ λλ€. μ’ μ’ μ’μ μ νμ λλ€.
- μΈ κ°μ μ€κ°κ°: 첫 λ²μ§Έ, μ€κ°, λ§μ§λ§ μμμ μ€κ°κ°μ μ νν©λλ€. λ¨μΌ μμλ₯Ό μ ννλ κ²λ³΄λ€ λ λμ νΌλ²μ μ 곡ν©λλ€.
λ³ν© μ λ ¬: μμ μ μ΄κ³ μ λ’°ν μ μλ μ ν
κ°μ
λ³ν© μ λ ¬μ λͺ¨λ κ²½μ°μ O(n log n) μκ° λ³΅μ‘λλ₯Ό 보μ₯νλ λ λ€λ₯Έ λΆν μ 볡 μκ³ λ¦¬μ¦μ λλ€. λ°°μ΄μ κ° νμ λ°°μ΄μ νλμ μμλ§ λ¨μ λκΉμ§ μ¬κ·μ μΌλ‘ λ°μΌλ‘ λλλλ€(νλμ μμλ λ³Έμ§μ μΌλ‘ μ λ ¬λ μνμ λλ€). κ·Έλ° λ€μ, νμ λ°°μ΄λ€μ λ°λ³΅μ μΌλ‘ λ³ν©νμ¬ μλ‘μ΄ μ λ ¬λ νμ λ°°μ΄μ λ§λ€κ³ , μ΅μ’ μ μΌλ‘ νλμ μ λ ¬λ λ°°μ΄λ§ λ¨μ λκΉμ§ μ΄ κ³Όμ μ κ³μν©λλ€.
μκ³ λ¦¬μ¦ λ¨κ³
- λΆν : κ° νμ λ°°μ΄μ νλμ μμλ§ λ¨μ λκΉμ§ λ°°μ΄μ μ¬κ·μ μΌλ‘ λ°μΌλ‘ λλλλ€.
- μ 볡: νλμ μμλ₯Ό κ°μ§ κ° νμ λ°°μ΄μ μ λ ¬λ κ²μΌλ‘ κ°μ£Όλ©λλ€.
- λ³ν©: μΈμ ν νμ λ°°μ΄λ€μ λ°λ³΅μ μΌλ‘ λ³ν©νμ¬ μλ‘μ΄ μ λ ¬λ νμ λ°°μ΄μ μμ±ν©λλ€. μ΄ κ³Όμ μ νλμ μ λ ¬λ λ°°μ΄λ§ λ¨μ λκΉμ§ κ³μλ©λλ€.
μμ
λμΌν λ°°μ΄ [7, 2, 1, 6, 8, 5, 3, 4]λ₯Ό μκ°ν΄ λ΄ μλ€.
λ³ν© μ λ ¬μ λ¨Όμ μ΄ λ°°μ΄μ [7, 2, 1, 6]κ³Ό [8, 5, 3, 4]λ‘ λλλλ€. κ·Έλ° λ€μ, λ¨μΌ μμ λ°°μ΄μ΄ λ λκΉμ§ κ°κ°μ μ¬κ·μ μΌλ‘ λλλλ€. λ§μ§λ§μΌλ‘, μ λ ¬λ μμλ‘ λ€μ λ³ν©ν©λλ€: [1, 2, 6, 7]κ³Ό [3, 4, 5, 8]λ‘ λ³ν©νκ³ , μ΄λ€μ λ€μ λ³ν©νμ¬ [1, 2, 3, 4, 5, 6, 7, 8]μ μ»μ΅λλ€.
μκ° λ³΅μ‘λ
- μ΅μμ κ²½μ°: O(n log n)
- νκ· μ μΈ κ²½μ°: O(n log n)
- μ΅μ μ κ²½μ°: O(n log n) β μ λ ₯ λ°μ΄ν°μ μκ΄μμ΄ μ±λ₯μ΄ λ³΄μ₯λ©λλ€.
κ³΅κ° λ³΅μ‘λ
O(n) β νμ λ°°μ΄μ λ³ν©νκΈ° μν΄ μΆκ° 곡κ°μ΄ νμν©λλ€. μ΄λ ν΅ μ λ ¬μ μ μ리 μ λ ¬(λλ μ΅μ ν μ κ±°μ μ μ리 μ λ ¬) νΉμ±κ³Ό λΉκ΅ν λ μλΉν λ¨μ μ λλ€.
λ³ν© μ λ ¬μ μ₯μ
- μ±λ₯ 보μ₯: λͺ¨λ κ²½μ°μ μΌκ΄λ O(n log n) μκ° λ³΅μ‘λλ₯Ό 보μ λλ€.
- μμ μ±: λμΌν κ°μ μμλ€μ μλμ μΈ μμλ₯Ό 보쑴ν©λλ€. μ΄λ μΌλΆ μ ν리μΌμ΄μ μμ μ€μν©λλ€.
- μ°κ²° 리μ€νΈμ μ ν©: μμ μ κ·Όμ΄ νμ μμΌλ―λ‘ μ°κ²° 리μ€νΈμ ν¨μ¨μ μΌλ‘ ꡬνλ μ μμ΅λλ€.
λ³ν© μ λ ¬μ λ¨μ
- λ λμ κ³΅κ° λ³΅μ‘λ: O(n)μ μΆκ° 곡κ°μ΄ νμνλ©°, μ΄λ λκ·λͺ¨ λ°μ΄ν°μ μμ λ¬Έμ κ° λ μ μμ΅λλ€.
- μ€μ λ‘λ μ½κ° λ λλ¦Ό: λ§μ μ€μ μλ리μ€μμ, (μ’μ νΌλ² μ νμ ν) ν΅ μ λ ¬μ΄ λ³ν© μ λ ¬λ³΄λ€ μ½κ° λ λΉ λ¦ λλ€.
ν΅ μ λ ¬ vs. λ³ν© μ λ ¬: μμΈ λΉκ΅
λ€μμ ν΅ μ λ ¬κ³Ό λ³ν© μ λ ¬μ μ£Όμ μ°¨μ΄μ μ μμ½ν νμ λλ€:
| νΉμ§ | ν΅ μ λ ¬ | λ³ν© μ λ ¬ |
|---|---|---|
| μκ° λ³΅μ‘λ (μ΅μ) | O(n log n) | O(n log n) |
| μκ° λ³΅μ‘λ (νκ· ) | O(n log n) | O(n log n) |
| μκ° λ³΅μ‘λ (μ΅μ ) | O(n2) | O(n log n) |
| κ³΅κ° λ³΅μ‘λ | O(log n) (νκ· , μ΅μ ν μ), O(n) (μ΅μ ) | O(n) |
| μμ μ± | μλμ | μ |
| μ μ리 μ λ ¬ | μ (μ΅μ ν μ) | μλμ |
| μ΅μ μ¬μ© μ¬λ‘ | μΌλ°μ μΈ λͺ©μ μ μ λ ¬, νκ· μ μΈ κ²½μ°μ μ±λ₯μΌλ‘ μΆ©λΆνκ³ λ©λͺ¨λ¦¬κ° μ μ½ μ‘°κ±΄μΌ λ. | μ±λ₯ 보μ₯μ΄ νμνκ±°λ μμ μ±μ΄ μ€μνκ±°λ μ°κ²° 리μ€νΈλ₯Ό μ λ ¬ν λ. |
κΈλ‘λ² κ³ λ €μ¬ν λ° μ€μ μ μ© μ¬λ‘
ν΅ μ λ ¬κ³Ό λ³ν© μ λ ¬ μ¬μ΄μ μ νμ μ’ μ’ νΉμ μ ν리μΌμ΄μ κ³Ό νκ²½μ μ μ½ μ‘°κ±΄μ λ°λΌ λ¬λΌμ§λλ€. λ€μμ λͺ κ°μ§ κΈλ‘λ² κ³ λ €μ¬νκ³Ό μ€μ μμμ λλ€:
- μλ² λλ μμ€ν : μμμ΄ μ νλ μλ² λλ μμ€ν (μ: μ μΈκ³μ μΌλ‘ μ¬μ©λλ IoT μ₯μΉμ λ§μ΄ν¬λ‘컨νΈλ‘€λ¬)μμλ O(n2) μ±λ₯μ μνμ΄ μλλΌλ λ©λͺ¨λ¦¬ μ¬μ©λμ μ΅μννκΈ° μν΄ ν΅ μ λ ¬μ μ μ리 μ λ ¬ νΉμ±μ΄ μ νΈλ μ μμ΅λλ€. κ·Έλ¬λ μμΈ‘ κ°λ₯μ±μ΄ μ€μνλ€λ©΄ λ³ν© μ λ ¬μ΄ λ λμ μ νμΌ μ μμ΅λλ€.
- λ°μ΄ν°λ² μ΄μ€ μμ€ν : λ°μ΄ν°λ² μ΄μ€ μμ€ν μ μΈλ±μ± λ° μΏΌλ¦¬ μ²λ¦¬λ₯Ό μν ν΅μ¬ μμ μΌλ‘ μ λ ¬μ μμ£Ό μ¬μ©ν©λλ€. μΌλΆ λ°μ΄ν°λ² μ΄μ€ μμ€ν μ μμ μ± λλ¬Έμ λ³ν© μ λ ¬μ μ νΈν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λμΌν ν€λ₯Ό κ°μ§ λ μ½λκ° μ½μ λ μμλλ‘ μ²λ¦¬λλλ‘ λ³΄μ₯ν©λλ€. μ΄λ μ μΈκ³μ μΌλ‘ κ±°λ μμκ° μ€μν κΈμ΅ μ ν리μΌμ΄μ μμ νΉν κ΄λ ¨μ΄ μμ΅λλ€.
- λΉ λ°μ΄ν° μ²λ¦¬: Apache Sparkλ Hadoopκ³Ό κ°μ λΉ λ°μ΄ν° μ²λ¦¬ νλ μμν¬μμλ λ°μ΄ν°κ° λ©λͺ¨λ¦¬μ λ΄κΈ°μλ λ무 ν΄ λ μΈλΆ μ λ ¬ μκ³ λ¦¬μ¦μμ λ³ν© μ λ ¬μ΄ μ’ μ’ μ¬μ©λ©λλ€. λ°μ΄ν°λ κ°λ³μ μΌλ‘ μ λ ¬λλ μ²ν¬λ‘ λλ λ€μ, k-way λ³ν© μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ λ³ν©λ©λλ€.
- μ μμκ±°λ νλ«νΌ: μ μμκ±°λ νλ«νΌμ κ³ κ°μκ² μνμ νμνκΈ° μν΄ μ λ ¬μ ν¬κ² μμ‘΄ν©λλ€. λ€μν μλ리μ€μ μ΅μ ννκΈ° μν΄ ν΅ μ λ ¬κ³Ό λ€λ₯Έ μκ³ λ¦¬μ¦μ μ‘°ν©μ μ¬μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ΄κΈ° μ λ ¬μλ ν΅ μ λ ¬μ μ¬μ©νκ³ , μ¬μ©μ μ νΈλμ λ°λ₯Έ νμ μ λ ¬μλ λ μμ μ μΈ μκ³ λ¦¬μ¦μ μ¬μ©ν μ μμ΅λλ€. μ μΈκ³μ μΌλ‘ μ κ·Ό κ°λ₯ν μ μμκ±°λ νλ«νΌμ λν μ¬λ¬ μΈμ΄μ κ±Έμ³ μ ννκ³ λ¬Ένμ μΌλ‘ μ μ ν κ²°κ³Όλ₯Ό 보μ₯νκΈ° μν΄ λ¬Έμμ΄μ μ λ ¬ν λ λ¬Έμ μΈμ½λ© λ° μ λ ¬ κ·μΉμ κ³ λ €ν΄μΌ ν©λλ€.
- κΈμ΅ λͺ¨λΈλ§: λκ·λͺ¨ κΈμ΅ λͺ¨λΈμ κ²½μ°, μκΈ°μ μ ν μμ₯ λΆμμ μ 곡νκΈ° μν΄ μΌκ΄λ μ€ν μκ°μ΄ μ€μν©λλ€. ν΅ μ λ ¬μ΄ μΌλΆ μν©μμ μ½κ° λ λΉ λ₯Ό μ μλλΌλ λ³ν© μ λ ¬μ 보μ₯λ O(n log n) μ€ν μκ°μ΄ μ νΈλ κ²μ λλ€.
νμ΄λΈλ¦¬λ μ κ·Ό λ°©μ
μ€μ λ‘ λ§μ μ λ ¬ ꡬνμ μ¬λ¬ μκ³ λ¦¬μ¦μ κ°μ μ κ²°ν©ν νμ΄λΈλ¦¬λ μ κ·Ό λ°©μμ μ¬μ©ν©λλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€:
- μΈνΈλ‘ μ λ ¬(IntroSort): ν΅ μ λ ¬λ‘ μμνμ§λ§ μ¬κ· κΉμ΄κ° νΉμ νκ³λ₯Ό μ΄κ³Όνλ©΄ ν μ λ ¬(λ λ€λ₯Έ O(n log n) μκ³ λ¦¬μ¦)μΌλ‘ μ ννμ¬ ν΅ μ λ ¬μ μ΅μ μ κ²½μ°μΈ O(n2) μ±λ₯μ λ°©μ§νλ νμ΄λΈλ¦¬λ μκ³ λ¦¬μ¦μ λλ€.
- ν μ λ ¬(Timsort): νμ΄μ¬μ `sort()`μ μλ°μ `Arrays.sort()`μμ μ¬μ©λλ νμ΄λΈλ¦¬λ μκ³ λ¦¬μ¦μ λλ€. λ³ν© μ λ ¬κ³Ό μ½μ μ λ ¬(μκ³ κ±°μ μ λ ¬λ λ°°μ΄μ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦)μ κ²°ν©ν©λλ€.
μ½λ μμ (μμμ© - μ¬μ©νλ μΈμ΄μ λ§κ² μμ νμΈμ)
νΉμ ꡬνμ μΈμ΄λ§λ€ λ€λ₯΄μ§λ§, κ°λ μ μΈ νμ΄μ¬ μμ λ λ€μκ³Ό κ°μ΅λλ€:
ν΅ μ λ ¬ (νμ΄μ¬):
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
λ³ν© μ λ ¬ (νμ΄μ¬):
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
left = merge_sort(left)
right = merge_sort(right)
return merge(left, right)
def merge(left, right):
result = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result.extend(left[i:])
result.extend(right[j:])
return result
μ°Έκ³ : μ΄κ²λ€μ μ€λͺ μ μν λ¨μνλ μμ μ λλ€. νλ‘λμ μμ€μ ꡬνμλ μ’ μ’ μ΅μ νκ° ν¬ν¨λ©λλ€.
κ²°λ‘
ν΅ μ λ ¬κ³Ό λ³ν© μ λ ¬μ λλ ·ν νΉμ§μ κ°μ§ κ°λ ₯ν μ λ ¬ μκ³ λ¦¬μ¦μ λλ€. ν΅ μ λ ¬μ μΌλ°μ μΌλ‘ νκ· μ μΈ κ²½μ°μ μ°μν μ±λ₯μ μ 곡νλ©°, νΉν μ’μ νΌλ² μ ν μ μ€μ λ‘λ λ λΉ λ₯Έ κ²½μ°κ° λ§μ΅λλ€. κ·Έλ¬λ μ΅μ μ κ²½μ° O(n2) μ±λ₯κ³Ό μμ μ± λΆμ‘±μ νΉμ μλ리μ€μμ λ¨μ μ΄ λ μ μμ΅λλ€.
λ°λ©΄μ λ³ν© μ λ ¬μ λͺ¨λ κ²½μ°μ O(n log n) μ±λ₯μ 보μ₯νλ©° μμ μ μΈ μ λ ¬ μκ³ λ¦¬μ¦μ λλ€. λ λμ κ³΅κ° λ³΅μ‘λλ μμΈ‘ κ°λ₯μ±κ³Ό μμ μ±μ μν νΈλ μ΄λμ€νμ λλ€.
ν΅ μ λ ¬κ³Ό λ³ν© μ λ ¬ μ¬μ΄μ μ΅μ μ μ νμ μ ν리μΌμ΄μ μ νΉμ μꡬ μ¬νμ λ°λΌ λ¬λΌμ§λλ€. κ³ λ €ν΄μΌ ν μμλ λ€μκ³Ό κ°μ΅λλ€:
- λ°μ΄ν°μ ν¬κΈ°: λ§€μ° ν° λ°μ΄ν°μ μ κ²½μ° λ³ν© μ λ ¬μ κ³΅κ° λ³΅μ‘λκ° λ¬Έμ κ° λ μ μμ΅λλ€.
- μ±λ₯ μꡬμ¬ν: 보μ₯λ μ±λ₯μ΄ μ€μνλ€λ©΄ λ³ν© μ λ ¬μ΄ λ μμ ν μ νμ λλ€.
- μμ μ± μꡬμ¬ν: μμ μ±(λμΌν κ°μ μμλ€μ μλμ μμ 보쑴)μ΄ νμν κ²½μ° λ³ν© μ λ ¬μ΄ νμμ μ λλ€.
- λ©λͺ¨λ¦¬ μ μ½: λ©λͺ¨λ¦¬κ° μ¬κ°νκ² μ νλ κ²½μ° ν΅ μ λ ¬μ μ μ리 μ λ ¬ νΉμ±μ΄ μ νΈλ μ μμ΅λλ€.
μ΄λ¬ν μκ³ λ¦¬μ¦ κ°μ νΈλ μ΄λμ€νλ₯Ό μ΄ν΄νλ©΄ κ°λ°μλ μ 보μ μ κ°ν κ²°μ μ λ΄λ¦¬κ³ κΈλ‘λ² νκ²½μμ νΉμ μꡬμ κ°μ₯ μ ν©ν μ λ ¬ μκ³ λ¦¬μ¦μ μ νν μ μμ΅λλ€. λν, μ΅μ μ μ±λ₯κ³Ό μ λ’°μ±μ μν΄ λ μκ³ λ¦¬μ¦μ μ₯μ μ λͺ¨λ νμ©νλ νμ΄λΈλ¦¬λ μκ³ λ¦¬μ¦μ κ³ λ €ν΄ λ³΄μΈμ.