이번 시간에는 선택 정렬의 동작 원리를 살펴보겠습니다.
선택 정렬 (Selection Sort) - "두 값을 비교해서 왼쪽으로 보내자!"
- 제자리 정렬 알고리즘의 하나입니다. 왼쪽 값이 오른쪽 값보다 더 큰지 작은지에 따라 맞바꿀지를 결정합니다. 이렇게 계속 맞바꿔서 최대값 또는 최소값을 왼쪽으로 계속 보내는 것입니다.
위의 배열로 알고리즘의 원리를 살펴보겠습니다. 여기서, 오름차순으로 정렬할 것인데, 오름차순은 왼쪽 값이 오른쪽 값보다 더 작으므로, 왼쪽 값이 더 크다면 서로 맞바꿔야 합니다.
왼쪽 값: 4
오른쪽 값: 3
왼쪽 값이 더 크므로 서로 맞바꿉니다.
따라서, 서로 맞바꾸면 위와 같은 형태가 됩니다.
왼쪽 값: 3
오른쪽 값: 1
왼쪽 값이 더 크므로 서로 맞바꿉니다.
왼쪽 값: 1
오른쪽 값: 5
왼쪽 값이 더 크지 않으므로 그대로 둡니다.
왼쪽 값: 1
오른쪽 값: 2
왼쪽 값이 더 크지 않으므로 그대로 둡니다.
여기까지 하면, 가장 작은 숫자가 맨 왼쪽으로 간 것을 볼 수 있습니다. 이 값은 이미 정렬되었으므로 정렬 대상에서 제외합니다.
왼쪽 값: 4
오른쪽 값: 3
왼쪽 값이 더 크므로 서로 맞바꿉니다.
왼쪽 값: 3
오른쪽 값: 5
왼쪽 값이 더 크지 않으므로 그대로 둡니다.
왼쪽 값: 3
오른쪽 값: 2
왼쪽 값이 더 크므로 서로 맞바꿉니다.
여기까지 하면, 두 번째로 작은 숫자가 왼쪽으로 간 것을 볼 수 있습니다. 이 값 역시 이미 정렬되었으므로 정렬 대상에서 제외합니다.
왼쪽 값: 4
오른쪽 값: 5
왼쪽 값이 더 크지 않으므로 그대로 둡니다.
왼쪽 값: 4
오른쪽 값: 3
왼쪽 값이 더 크므로 서로 맞바꿉니다.
왼쪽 값: 5
오른쪽 값: 4
왼쪽 값이 더 크므로 서로 맞바꿉니다.
이렇게 하면, 오름차순으로 깔끔하게 정렬된 것을 볼 수 있습니다. ^^
이 알고리즘을 소스 코드로 표현하면 아래와 같습니다.
소스 코드
출력 결과) 1 2 3 4 5
<출처>
소스 코드: https://github.com/jhs951101/SelectionSort
'IT강의 > 알고리즘' 카테고리의 다른 글
버블 정렬 (0) | 2022.11.16 |
---|---|
플로이드 워셜 알고리즘 (2) - 소스 코드 (0) | 2022.11.16 |
이진 탐색 (0) | 2022.11.13 |
플로이드 워셜 알고리즘 (1) - 동작 원리 (0) | 2022.11.13 |
다이나믹 프로그래밍 (0) | 2022.10.30 |