ν‹°μŠ€ν† λ¦¬ λ·°

λ°˜μ‘ν˜•
κ°€μž₯ μž‘μ€ 것을 μ„ νƒν•΄μ„œ 제일 μ•žμœΌλ‘œ 보낸닀.

λ‹€μŒ 10개의 수λ₯Ό μ˜€λ¦„ 차순으둜 μ •λ ¬ν•΄λ³΄μž

1 10 5 8 7 6 4 3 2 9

κ°€μž₯ μž‘μ€ 숫자 1은 κ°€μž₯ μ•žμͺ½μ— μžˆμœΌλ‹ˆ 정렬이 된 것

 

1 10 5 8 7 6 4 3 2 9 -> 1 2 5 8 7 6 4 3 10 9

1을 μ œμ™Έν•˜κ³  λ‚˜λ¨Έμ§€ μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ 숫자 2λ₯Ό κ°€μž₯ μ•žμ— μžˆλŠ” 10κ³Ό λ°”κΎΌλ‹€.

 

1 2 5 8 7 6 4 3 10 9 -> 1 2 3 8 7 6 4 5 10 9

κ·Έ λ‹€μŒ κ°€μž₯ μž‘μ€ 숫자 3을 κ°€μž₯ μ•žμ˜ 숫자 5와 λ°”κΎΌλ‹€.

 

이런 μ‹μœΌλ‘œ 정렬을 ν•˜λŠ” 것이 선택정렬

 

 

 

파이썬 μ½”λ“œ
# 선택정렬 (Selection Sort)

# i와 jλŠ” 배열에 μ›μ†Œλ“€μ„ 반볡적으둜 νƒμƒ‰ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
# min μ΅œμ†Œκ°’ 의미
# index κ°€μž₯ μž‘μ€ μ›μ†Œκ°€ μ‘΄μž¬ν•˜λŠ” μœ„μΉ˜
# temp μ›μ†Œ κ΅ν™˜μ„ μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μž„μ‹œλ³€μˆ˜

def selection_sort(arr):
    
    # forλ¬Έ λ°°μ—΄μ˜ 길이 만큼 반볡 (0λΆ€ν„° 리슀트 길이 미만)
    for i in range(len(arr)):
        min = 9999
        
        # forλ¬Έ μ΅œμ†Œκ°’ μ°ΎκΈ° (iλΆ€ν„° λ°°μ—΄μ˜ 길이 미만)
        for j in range(i, len(arr)):
            # λ‘κ°œμ˜ 값을 λΉ„κ΅ν•΄μ„œ min이 크면 min에 arr[j]값을 λ„£μ–΄μ€€ν›„ indexλ₯Ό j둜 λ³€κ²½
            if min > arr[j]:
                min = arr[j]
                index = j
        
        # λ‘κ°œμ˜ κ°’ λ°”κΎΈκΈ°
        temp = arr[i]
        arr[i] = arr[index]
        arr[index] = temp
    
    return arr
                

test = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9]
print("선택 μ •λ ¬λœ 데이터 : {}".format(selection_sort(test)))

 

 

 

μ‹œκ°„ λ³΅μž‘λ„

μ²˜μŒμ— 1~10κΉŒμ§€ 확인

κ·Έ λ‹€μŒμ—λŠ” 2~10κΉŒμ§€ 확인

κ·Έ λ‹€μŒμ—λŠ” 3~10κΉŒμ§€ 확인 

 

10 + 9 + 8 + ... + 1

n * (n+1) / 2 

n의 제곱

O(n*n)

 

선택정렬은 λ‹€λ₯Έ μ •λ ¬κ³Ό λΉ„κ΅ν–ˆμ„ λ•Œ λΉ„νš¨μœ¨μ μΈ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

데이터가 컀질수둝 맀우 λ§Žμ€ 연산을 μ²˜λ¦¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„μ΄ 많이 κ±Έλ¦°λ‹€.

λ°˜μ‘ν˜•
λŒ“κΈ€