알고리즘 공부

[정렬] 선택정렬 (Selection Sort) - Java

Developer KTU 2024. 9. 7. 02:19
반응형

1. 개요

선택정렬이란, 배열의 맨 앞 요소를 선택한 후 그 다음 요소부터 가장 작은 값을 찾아 맨 앞 요소와 비교 후 swap 하는 형식의 정렬 알고리즘이다. (오름차순 기준)

 

 

2. 시간복잡도

모든 배열의 요소를 첫 요소로 잡고 (N), 그 다음 요소부터 끝까지 최소값을 찾아야하므로 (N) 시간복잡도는 O(N^2)이다.

 

 

3. 핵심이론

- 배열의 크기를 5로 가정

5 1 3 2 4

 

- 맨 앞 요소를 선택 후 그 다음 요소부터 최소값을 찾은 후  비교하여 서로 swap 한다.

5
(맨 앞 요소 선택)
1
(최소값)
3 2 4
1 5 3 2 4

 

- 위 과정을 반복한다.

1 5
(맨 앞 요소 선택)
3 2
(최소값)
4
1 2 3 5 4

 

1 2 3
(맨 앞 요소 선택)
5 4
(최소값)
1 2 3 5 4

 

1 2 3 5
(맨 앞 요소 선택)
4
(최소값)
1 2 3 4 5

 

- 정렬 완료

 

 

4. 예시 코드

public class Main {
    public static void selectionSort(int[] arr){
        // 맨 앞 요소 설정은 배열의 가장 끝 바로 앞까지만 설정
        for(int i = 0; i < arr.length - 1; i++){
            // 현재 위치를 최소값으로 가정
            int minIdx = i;
            // 현재 위치의 바로 다음 요소부터 배열의 끝까지 순회하며 최소값을 찾는다.
            for(int j = i + 1; j < arr.length; j++){
                // 현재 위치의 요소보다 더 작은 값이 있다면
                if(arr[minIdx] > arr[j]){
                    // 그 인덱스를 최소값의 인덱스로 설정한다.
                    minIdx = j;
                }
            }
            // 순회 종료 후 swap 진행
            swap(arr, i, minIdx);
        }
    }

    public static void swap(int[] arr, int t1, int t2){
        int temp = arr[t1];
        arr[t1] = arr[t2];
        arr[t2] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {5, 1, 3, 2, 4};

        selectionSort(arr);

        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}
출력 결과 : 1 2 3 4 5

 

반응형