CS/Algorithm

선택 μ •λ ¬(selection sort)

deo2kim 2020. 9. 22. 22:51
λ°˜μ‘ν˜•

πŸ“” 선택 μ •λ ¬(selection sort) μ΄λž€

  • μ˜€λ¦„μ°¨μˆœμ˜ 경우 κ°€μž₯ μž‘μ€ μ›μ†Œλ₯Ό 맨 μ•žμœΌλ‘œ 보낸닀.
  • 2개의 λ°˜λ³΅λ¬Έμ„ μ€‘μ²©ν•΄μ„œ κ΅¬ν˜„ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„λ³΅μž‘λ„λŠ” O(n^2)
  • ν•œ μ„ΈνŠΈκ°€ 끝날 λ•Œλ§ˆλ‹€ κ°€μž₯ μž‘μ€ μˆ˜κ°€ 맨 μ•žμ— μ˜¨λ‹€.

 

πŸ“” 선택 μ •λ ¬(selection sort) 예제

  • μœ„μ˜ μ˜ˆμ œλŠ” μ˜€λ¦„μ°¨μˆœμΌ 경우의 μ˜ˆμ œμ΄λ‹€.
  • 5개의 μ›μ†Œμ€‘ κ°€μž₯ μž‘μ€ 숫자λ₯Ό 맨 μ•žμ˜ μˆ«μžμ™€ λ°”κΎΌλ‹€.
  • 1μ„ΈνŠΈκ°€ λλ‚˜λ©΄ κ°€μž₯ μž‘μ€ μˆ˜κ°€ 맨 μ•žμœΌλ‘œ μ˜¨λ‹€. 
  • λ‹€μŒ μ„ΈνŠΈλΆ€ν„°λŠ” 맨 μ•žμ˜ 숫자λ₯Ό λΉΌκ³  비ꡐλ₯Ό ν•΄μ€€λ‹€. (이미 κ°€μž₯ μž‘μ€ 수이기 λ•Œλ¬Έ)

 

πŸ“” 선택 μ •λ ¬(selection sort) κ΅¬ν˜„

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

 

πŸ“” 선택 μ •λ ¬(selection sort) νŠΉμ§•

  • μž₯점
    • λ‹¨μˆœν•œ κ΅¬ν˜„
  • 단점
    • 정렬이 λΆˆν•„μš”ν•œ μš”μ†Œμ—λ„ μ ‘κ·Όν•΄μ•Ό ν•œλ‹€.
    • μ‹œκ°„λ³΅μž‘λ„ O(n^2)
  • κ΅¬ν˜„μ΄ κ°„λ‹¨ν•˜μ§€λ§Œ 맀우 λΉ„νœΌμ μ΄λ―€λ‘œ κ±°μ˜ 쓰이지 μ•ŠμŒ.

 

πŸ“” 선택 μ •λ ¬(selection sort) 참ꡐ자료

 

λ°˜μ‘ν˜•