선택 정렬을 만들어보자

2020. 6. 29. 02:20개발노트

def selectsort(arr):
    for i in range(len(arr) - 1):
        idx = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[idx]:
                idx = j
        arr[i], arr[idx] = arr[idx], arr[i]
    return arr
print(selectsort([3, 2, 1]))
i idx j arr[j] arr[idx] if문 idx 변경 arr
0 0 1 2 3 True 0 >> 1 [3, 2, 1]
0 0 2 1 2 True 1 >> 2 [3, 2, 1]
for문을 모두 돌고 현재 arr[idx]와 arr[i]의 요소만 바꿔준다. [3, 2, 1] >> [1, 2, 3]
1 1 2 2 1 False X [1, 2, 3]
두 개의 for문을 모두 돌았기 때문에 현재 arr인 [1, 2, 3]을 리턴한다. 

1. for문을 돌며 비교 대상을 선택 요소의 수 - 1 만큼 반복한다.

(비교 대상을 제외하고 탐색하는 두 번째 for문을 돌기 위해)

2. for문을 돌며 비교 대상을 제외한 나머지 요소 중 가장 작거나 큰 수를 선택

(오름차순, 내림차순이냐에 따라 다르게)

3. 두 번째 for문을 모두 돌았다면 비교 대상 arr[i]와 arr[idx]의 값을 교환한다.

4. 위 과정을 반복