
- 배열 요소에서 최솟값을 찾아준다.
- 최솟값이 위치한 인덱스 값으로 원래의 인덱스 값을 변경해준다.
- 최솟값이 위치한 곳과 비교를 시작한 위치의 값을 바꿔준다.
- 첫 번째 회전에서의 비교 회수 : 1 ~ n-1 => (n-1)번
- 두 번째 회전에서의 비교 회수 : 2 ~ n-1 => (n-2)번
(n-1) + (n-2) + ... + 2 + 1 => n(n-1) / 2
package hw_0927;
public class SelectionSort {
public static int[] SelectionSort(int[] arr) {
int temp;
for (int i = 0; i < arr.length - 1; i++) {
int idx = i;
for (int j = i + 1; j < arr.length; j++) {
/*
* 바뀐 인덱스 값과 증가된 j값에 위치한 요소값과 계속적으로 비교,
* 즉, 배열의 최솟값을 찾아내서 최솟값의 인덱스를 idx에 할당
*/
if (arr[j] < arr[idx]) {
idx = j;
}
}
/*
* 찾아낸 인덱스 값을 활용하여, 인덱스에 위치한 값이랑 첫번째 값이랑 바꿔줌
*/
temp = arr[i];
arr[i] = arr[idx];
arr[idx] = temp;
}
return arr;
}
public static void printArr(int[] arr) {
for (int element : arr) {
System.out.print(element + " ");
}
System.out.println();
}
public static void main(String[] args) {
int arr[] = { 8, 2, 1, 5, 6, 9 };
System.out.println("-----정렬 전-----");
printArr(arr);
System.out.println("-----정렬 후-----");
SelectionSort(arr);
printArr(arr);
}
}

오늘은 선택 정렬의 원리와 복잡도를 알아보고 코드로 구현해보았습니다.
다양한 정렬 방식이 있는데, 얼른 다른 정렬 방식도 마스터 해야할 것 같습니다.
선택 정렬의 동작 원리는 배열의 최솟값을 찾아내는 방식이었던 것 같습니다. 이를 코드로 어떻게 표현할지 잘 고민했기 때문에, 비교적 수월하게 구현했었던 것 같습니다.