선택 정렬을 만들어보자
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. 위 과정을 반복