μ½μ μ λ ¬.
λ°°μ΄ κ΅¬μ‘°λ₯Ό μ΄λ»κ² μ¬μ©ν μ μλμ§ μ΄ν΄νλ κ°μ₯ μ’μ λ°©λ²μ μ€μ μκ³ λ¦¬μ¦μ κ²ν νλ κ²μ λλ€.
-
μ½μ
μ λ ¬(insertion sort) μ λ°°μ΄μ κ°μ μ λ ¬νλ μκ³ λ¦¬μ¦μΌλ‘, μμλ₯Ό μ ν μ μλ λͺ¨λ μ νμ κ°μμ μλν©λλ€.
- μ μ, λ¬Έμμ΄, μ¬μ§μ΄ μ ν΅κΈ°νμ λ°λΌ μ μ₯λ μ°½κ³ μ 컀νΌκΉμ§ μ½μ μ λ ¬λ‘ μ λ ¬ν μ μμ΅λλ€.
μ½μ μ λ ¬μ λ°°μ΄μ μΌλΆλ₯Ό μ λ ¬νκ³ , μ΄ μ λ ¬λ λ²μλ₯Ό μ 체 λ°°μ΄μ΄ μ λ ¬λ λκΉμ§ νμ₯ν©λλ€.
- μκ³ λ¦¬μ¦μ μ λ ¬λμ§ μμ λ°°μ΄μ κ° μμλ₯Ό λ°λ³΅νλ©΄μ μ λ ¬λ λΆλΆμ μ¬λ°λ₯Έ μμΉλ‘ μ΄λν©λλ€.
iμ λ°λ³΅μ μμνλ μμ μ i-1 μ΄νμ μμΉμ μλ μμλ λͺ¨λ μ λ ¬λ μμ΅λλ€.
- μκ³ λ¦¬μ¦μ μ΄μ μΈλ±μ€ iμ μλ μμλ₯Ό μ ννκ³ , μ λ ¬λ μ λμ¬μμ μ΄ μμμ μ¬λ°λ₯Έ μμΉλ₯Ό μ°Ύμ λλ¨Έμ§ μμλ₯Ό λ€λ‘ μ΄λμμΌμ μ νν μμκ° λ€μ΄κ° 곡κ°μ λ§λ μ μ½μ
ν©λλ€.
- κ·Έλ¬λ©΄ μ λ ¬λ μ λμ¬κ° νλ λ 컀μ§λ©΄μ 0μμ iκΉμ§ λͺ¨λ μμκ° μ λ ¬λ μνκ° λ©λλ€.
- μ²μμλ 첫 λ²μ§Έ μμλ₯Ό μ΄κΈ° μ λ ¬λ μ λμ¬λ‘ μ μΈνκ³ i = 1λΆν° λ°λ³΅μ μμν μ μμ΅λλ€.
- κ·Έλ¬λ©΄ μ λ ¬λ μ λμ¬κ° νλ λ 컀μ§λ©΄μ 0μμ iκΉμ§ λͺ¨λ μμκ° μ λ ¬λ μνκ° λ©λλ€.
μ»€νΌ μ»¬λ μ μ μ μ λμμΌλ‘ μ λ ¬νκ³ μΆλ€κ³ ν©μλ€.
무μλ³΄λ€ ν리미μ 컀νΌκ° μ°½κ³ κΉμμ΄ λ°ν μλ€ μν΄λ²λ¦¬λ λΉκ·Ήμ λ°λμ§νμ§ μμ΅λλ€.
- λ°λΌμ μ ν΅κΈ°νμ΄ μ μΌ μ§§κ² λ¨μ 컀νΌλ₯Ό κ°μ₯ μμͺ½μ λ£μ΄μ μ½κ² μ κ·Όν μ μκ² ν΄μΌν©λλ€.
μ°μ 컀νΌλ°± νλλ₯Ό μ λ ¬λ λΆλΆμΌλ‘ μ μΈνκ³ , μ΄λ₯Ό κΈ°μ€μΌλ‘ μ λ ¬ λ²μλ₯Ό μ€μ ν¨μΌλ‘μ¨ μ»€νΌ μ λ ¬μ μμν©λλ€.
- κ·Έ λ€μμλ κ°μ₯ μμͺ½μμ λ λ²μ§Έ λ°±λΆν° λ μ§λ₯Ό λΉκ΅ν΄ μ λ ¬λ λΆλΆμ λ°±λ³΄λ€ λ μμ λ£μ΄μΌ ν μ§λ₯Ό νλ¨ν©λλ€.
- μμΉλ₯Ό λ°κΏ νμκ° μλ κ²½μ°μ μμλ₯Ό λ°κΎΈκ³ , κ·Έλ μ§ μμ κ²½μ°μ μ리λ₯Ό μ μ§ν©λλ€.
- μ΄μ μμ μκ² λ§¨ μμ λ λ°±μ΄ μ λ ¬λλ€κ³ λ§ν μ μμ΅λλ€.
- μμΉλ₯Ό λ°κΏ νμκ° μλ κ²½μ°μ μμλ₯Ό λ°κΎΈκ³ , κ·Έλ μ§ μμ κ²½μ°μ μ리λ₯Ό μ μ§ν©λλ€.
μ΄λ κ² λΆλΆμ μΌλ‘ μ λ ¬νλ κ³Όμ μ λ§μ§λ§ λ°±κΉμ§ μ§ννλ©΄μ μμΉλ₯Ό λ°κΎΈλ μμ μ λ°λ³΅νλ©΄, μ»€νΌ μ»¬λ μ μ μλ²½νκ² μ 리ν μ μμ΅λλ€.
μλ μ½λμ κ°μ΄ μ€μ²©λ 루νλ₯Ό μ΄μ©ν΄ μ½μ μ λ ¬μ ꡬνν μ μμ΅λλ€.
InsertionSort(array: A):
Integer: N = length(A)
Integer: i = 1
WHILE i < N: // 1
Type: current = A[i]
Integer: j = i - 1
WHILE j >= 0 AND A[j] > current: // 2
A[j + 1] = A[j]
j = j - 1
A[j + 1] = current
i = i +1
- λ°κΉ₯μͺ½ 루νλ μ΅μ΄μ μ λ ¬λμ§ μμ μμμΈ μΈλ±μ€ iκ° 1μΈ μμλΆν° μμνκ³ μ λ ¬λμ§ μμ λ²μμ μλ κ° κ°μ λ°λ³΅ν©λλ€(1)
- μμͺ½ 루νλ μΈλ±μ€ jλ₯Ό μ¬μ©ν΄ μ λ ¬λ μ λμ¬μ μμλ₯Ό 맨 λ€μμλΆν° νλμ© λ°λ³΅ν©λλ€(2)
- λ°λ³΅ κ° λ¨κ³μμ νμ¬ κ°κ³Ό μ λ ¬λ μ λμ¬ μμ μλ μΈλ±μ€ jμ κ°μ λΉκ΅ν΄ νμΈν©λλ€.
- jμ μλ μμκ° λ ν¬λ©΄ λ κ°μ μμκ° μλͺ»λμΌλ―λ‘ κ΅νν΄μΌ ν©λλ€.
- νμ¬ κ°μ λ³λμ λ³μμΈ currentμ μ μ₯νκΈ° λλ¬Έμ μ΄μ μμμμ λ°μ΄ν°λ₯Ό μ§μ 볡μ¬ν©λλ€.
- μ¦, iλ²μ§Έμ jλ²μ§Έμ κ°μ μμ ν κ΅νν νμκ° μμ΅λλ€.
- λ΄λΆ 루νλ νμ¬ κ°μ λ°°μ΄μ 맨 μμ λ°μ΄λ£κ±°λ νμ¬ κ°λ³΄λ€ μ΄μ κ°μ΄ λ μμ λκΉμ§λ§(μ΄ κ²½μ°κ° λ°λ‘ νμ¬ κ°μ΄ μ λ ¬λ μ λμ¬μ μ¬λ°λ₯Έ μμΉμ μμμ λνλ
λλ€.) κ³μ μ§νν©λλ€.
- μ΄μ λ΄λΆ 루νμ λμμ νμ¬ κ°μ μ¬λ°λ₯Έ μμΉμ μ°κΈ°λ§ νλ©΄ λ©λλ€.
- λ°κΉ₯μͺ½ 루νλ λ€μ μ λ ¬λμ§ μμ κ°μΌλ‘ μ§νν©λλ€.
- μμͺ½ 루νλ μΈλ±μ€ jλ₯Ό μ¬μ©ν΄ μ λ ¬λ μ λμ¬μ μμλ₯Ό 맨 λ€μμλΆν° νλμ© λ°λ³΅ν©λλ€(2)
μλ κ·Έλ¦Όμ μκ³ λ¦¬μ¦μ΄ μ΄λ»κ² λμνλμ§ μκ°νν΄ λ³΄μ¬μ€λλ€.
- κ° μ€μ λ°λ³΅ μμ μ λ°°μ΄μ μνλ₯Ό 보μ¬μ€λλ€.
- λΉ¨κ°μ μμλ νμ¬ μμΉμ μλ μμλ₯Ό λνλ΄λ©°, νμ΄νλ νμ¬ μμΉμ μμλ₯Ό μ½μ νλ©΄μ λ°μνλ μ΄λμ λνλ λλ€.
μ½μ μ λ ¬μ κ·Έλ κ² ν¨μ¨μ μ΄μ§ μμ΅λλ€.
- λ°°μ΄μ μμλ₯Ό μ½μ ν λ, μλΉ λΆλΆμ μ΄λν΄μΌ ν μλ μμ΅λλ€.
- μ΅μ
μ κ²½μ°(worst-case), μκ³ λ¦¬μ¦μ λΉμ©μ μνμ€ μμ μμ μ κ³±μ λΉλ‘ν©λλ€.
- μ¦, μ΅μ
μ κ²½μ° λ¦¬μ€νΈμ λͺ¨λ μμλ§λ€ μμ λͺ¨λ μμλ₯Ό μ΄λν΄μΌν©λλ€.
- λ°°μ΄μ ν¬κΈ°λ₯Ό 2λ°°λ‘ λ리면, μ΅μ μ κ²½μ° λΉμ©μ΄ 4λ°° μ¦κ°ν©λλ€.
- μ¦, μ΅μ
μ κ²½μ° λ¦¬μ€νΈμ λͺ¨λ μμλ§λ€ μμ λͺ¨λ μμλ₯Ό μ΄λν΄μΌν©λλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ μ½μ μ λ ¬μ λ°°μ΄μ΄ μ΄λ»κ² μλνλμ§ μ€μν ν΅μ°°μ μ 곡ν©λλ€.
μ΄ κ°λ¨ν μκ³ λ¦¬μ¦μ μΈλ±μ€λ₯Ό μ¬μ©ν΄ μμλ μ§μ μ κ·Όν μ μμ΄μΌ νλ©°, μ μμλ₯Ό μ½μ ν λ κ°μ κ΅νν μ μμ΄μΌ νλ©°, λͺ¨λ μμλ₯Ό λ°λ³΅(iteration)ν μ μμ΄μΌ νλ€λ λ°°μ΄μ μ¬λ¬ νΉμ±μ 보μ¬μ€λλ€.