CS/Algorithm

μ‚½μž… μ •λ ¬(insertion sort)

deo2kim 2020. 9. 23. 11:27
λ°˜μ‘ν˜•

πŸ“” μ‚½μž… μ •λ ¬(insertion sort) μ΄λž€

  • 숫자λ₯Ό μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•˜λŠ” 방법 "ν•„μš”ν•  κ²½μš°μ—λ§Œ" μœ„μΉ˜λ₯Ό λ°”κΎΌλ‹€.
  • 2개의 λ°˜λ³΅λ¬Έμ„ μ€‘μ²©ν•΄μ„œ κ΅¬ν˜„ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„λ³΅μž‘λ„λŠ” O(n^2)
  • ν•œ μ„ΈνŠΈκ°€ 끝날 λ•Œλ§ˆλ‹€ μ•žμ˜ μˆ«μžλ“€μ€ "μ •λ ¬"된 μƒνƒœμ΄λ‹€.

 

πŸ“” μ‚½μž… μ •λ ¬(insertion sort) 예제

  • μœ„μ˜ μ˜ˆμ œλŠ” μ˜€λ¦„μ°¨μˆœμΌ 경우의 μ˜ˆμ œμ΄λ‹€.
  • 5개의 μ›μ†Œμ€‘ 처음과 κ·Έ λ‹€μŒμ„ λΉ„κ΅ν•œλ‹€. κ·Έ λ‘˜μ„ μ •λ ¬ν•œλ‹€.
  • 1μ„ΈνŠΈκ°€ λλ‚˜λ©΄ μ•žμ˜ μˆ«μžλ“€(λ…Έλž€μƒ‰)은 μ •λ ¬λœ μƒνƒœμ΄λ‹€.
  • λ‹€μŒ μ„ΈνŠΈλŠ” λ‘λ²ˆμ§Έ μˆ«μžλΆ€ν„° μ•žμ˜ μˆ«μžμ™€ λΉ„κ΅ν•œλ‹€.

 

πŸ“” μ‚½μž… μ •λ ¬(insertion sort) κ΅¬ν˜„

numbers = [5, 3, 8, 1, 2]
print(f'μ •λ ¬ μ „: {numbers}')
print()
for i in range(len(numbers)-1):
    print(f'{i + 1}μ„ΈνŠΈ')
    for j in range(i, -1, -1):
        if numbers[j] > numbers[j+1]:
            numbers[j], numbers[j+1] = numbers[j+1], numbers[j]
        else:
            break
    print(f'μ •λ ¬ 쀑: {numbers}')
print()
print(f'μ •λ ¬ ν›„: {numbers}')

 

πŸ“” μ‚½μž… μ •λ ¬(insertion sort) νŠΉμ§•

  • μž₯점
    • 버블정렬과 선택정렬과 같은 O(n^2) μ΄μ§€λ§Œ μ–΄λŠμ •λ„ 정렬이 λ˜λŠ” ν˜•νƒœλ‘œ μ§„ν–‰λ˜κΈ° λ•Œλ¬Έμ— μ—°μ‚°μ˜ νšŸμˆ˜κ°€ 적어 사싀상 쑰금 더 λΉ λ₯΄λ‹€.
  • 단점
    • μ—­μ‹œ μ‹œκ°„λ³΅μž‘λ„ O(n^2)

 

  • λ§Œμ•½ 정렬이 거의 된 μƒνƒœλΌλ©΄ ν•œμ„ΈνŠΈμ— μˆ˜ν–‰ν•˜λŠ” 연산이 거의 μ—†μœΌλ―€λ‘œ 속도가 맀우 빨라진닀.

 

 

 

πŸ“” μ‚½μž… μ •λ ¬(insertion sort) μ°Έκ΅μžλ£Œ

 

λ°˜μ‘ν˜•