ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 선택 정렬(Selection Sort)
    알고리즘 2021. 12. 13. 20:33

    특징

    • '가장 작은 것을 선택해서 가장 앞으로 이동시킨다'는 아이디어로 만들어진 알고리즘
    • 데이터를 비교하며 가장 작은 것을 선택하고, 이를 가장 앞의 것과 교환(swap)해서 이동시킵니다. 그 다음 데이터부터 위 과정을 반복합니다.
    • 교환(swap)하는 과정에서 임시 변수가 필요합니다.
    • 교환하는 형태로 정렬이 진행되기 때문에 임시 변수를 제외하고는 추가적인 공간이 필요하지 않습니다.

    효율

    • 시간복잡도 - O(N2)
      • 비교 연산의 횟수: (N-1) + (N-2) + (N-3) + ... + 1 = N * (N - 1) / 2
      • 최선, 평균, 최악의 경우의 시간복잡도가 동일합니다.
    • 공간복잡도 - O(N)

    구현

    function selectionSort(input) {
        for (let i = 0; i < input.length - 1; i++) {
            // i 번째 원소를 최소값으로 가정
            let minIndex = i;
            for (let j = i + 1; j < input.length; j++) {
                // 바로 다음 데이터부터 비교 시작
                if (input[minIndex] > input[j]) {
                    // 최소값보다 해당 데이터가 작으면 인덱스를 변경
                    minIndex = j;
                }
            }
            // 최소값이 변경됐다면, 가장 앞의 데이터와 교환(swap)
            if (i !== minIndex) {
                let temp = input[i];
                input[i] = input[minIndex];
                input[minIndex] = temp;
                console.log(...input);
            }
        }
    }
    
    let sample = [7, 3, 2, 8, 9, 4, 6, 1, 5];
    selectionSort(sample);
    /* 정렬 과정 출력
    1 3 2 8 9 4 6 7 5
    1 2 3 8 9 4 6 7 5
    1 2 3 4 9 8 6 7 5
    1 2 3 4 5 8 6 7 9
    1 2 3 4 5 6 8 7 9
    1 2 3 4 5 6 7 8 9
    */

     

    '알고리즘' 카테고리의 다른 글

    기수 정렬(Radix Sort)  (0) 2021.12.15
    병합 정렬(Merge Sort)  (0) 2021.12.15
    퀵 정렬(Quick Sort)  (0) 2021.12.14
    삽입 정렬(Insertion Sort)  (0) 2021.12.13
    버블 정렬(Bubble Sort)  (0) 2021.12.13

    댓글

Designed by Tistory.