221119 선택정렬

Jongleee·2022년 11월 21일
0

TIL

목록 보기
109/737

선택정렬

크기 n의 배열이 주어졌을 때, index 0부터 n-1까지의 모든 index i에 대해서, i번째 부터 n-1 번째까지 값 중 가장 작은 값을 찾아 index i에 놓는 방식의 정렬
모든 index에 대해서 그 index에 위치시킬 값을 “선택”하기 때문에 이 정렬 알고리즘을 “선택 정렬”또는 “Selection Sort”이라고 함

복잡도

  1. 공간 복잡도
    별도의 추가 공간을 사용하지 않고 주어진 배열이 차지하고 있는 공간 내에서 값들의 위치만 바꾸기 때문에 O(1)의 공간 복잡도를 가짐

  2. 시간 복잡도
    루프문을 통해 모든 인덱스에 접근해야 하기 때문에 O(N)을 시간을 소모
    하나의 루프에서는 현재 인덱스의 값과 다른 인덱스의 값들과 비교하여 최소값을 찾은 후 현재 인덱스에 있는 값과 상호 자리 교대를(swap)해야 해야하기 때문에 O(N) 시간이 필요
    따라서 선택 정렬은 총 O(N^2)의 시간 복잡도를 가짐

구현

public class Selection {
    public static void sort(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[j] < arr[minIdx])
                    minIdx = j;
            }
            swap(arr, i, minIdx);
        }
    }

    private static void swap(int[] arr, int a, int b) {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }
}

출처 : https://www.daleseo.com/sort-selection/

0개의 댓글