Notice
Recent Posts
Recent Comments
Tags
more
Today
Total
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
관리 메뉴

SW 꿈나무

Selection Sort (선택 정렬) 본문

Computer Science/Algorithm

Selection Sort (선택 정렬)

현식 :) 2020. 3. 28. 21:49

Selection Sort (선택 정렬)

  • 전체 자료 중, 해당 위치에 맞는 자료를 선택하여 위치를 교환하는 정렬 방식

  • 입력 배열 외 추가 메모리를 요구하지 않음.

  • 장점 : 자료 이동 횟수가 사전에 정해진다.

  • 단점 : 값이 같은 경우에도 위치가 변경되므로 안정성을 만족하지 않는다. -> Code에서 극복하는 부분 참조

  • 시간복잡도 : T(n) = (n-1) + (n-2) + … + 2 + 1 = n(n-1)/2 = O(n^2)

  • 동작 순서 (최소 선택 정렬을 예시로 함.)

    1. 첫 번째 인덱스부터 마지막까지 크기를 비교하여 제일 작은 값을 찾는다.
    2. 현재 인덱스와 제일 작은 값의 위치를 바꾼다.
    3. 두 번째 인덱스부터 위 정렬을 반복한다.
    4. 반복.
  • Code

    #include <stdio.h>                                      // 헤더파일 선언
    #define ARRAY_SIZE 10                                   // ARRAY SIZE 10으로 정의
    // Logic 부---------------------------------------------
    void selection_sort(int array[], int n)                 // 선택 정렬 함수 및 인수 선언
    {
        int least, temp;                                    // 최소값과 위치변경을 위한 변수 선언
        for(int i=0;i<n-1;i++)                              // n-1 회 반복
        {
            least = i;                                      // 최소값에 i 대입
            for(int j=i+1;j<n;j++)                          // i+1 부터 n 까지 반복 
            {
                if(array[least]>array[j])                   // array[least]가 array[j]보다 크면
                    least = j;                              // least에 j 대입
            }
            // if(array[i] != array[least])                 // -> 값이 같은 경우 위치 변경하지 않도록 조건 설정
            temp = array[i];
            array[i] = array[least];
            array[least] = temp;                            // i번째 인덱스와 최소값 인덱스 변경
        }
    }
    // Main 부----------------------------------------------
    void main()
    {
        int Arr[ARRAY_SIZE] = {3,6,8,4,0,7,5,1,2,9};        // Arr 선언 및 임의의 값 대입
        selection_sort(Arr, ARRAY_SIZE);                    // 선택 정렬 함수 실행
        for(int i=0;i<ARRAY_SIZE;i++)                       // ARRAY_SIZE 만큼 반복
        {
            printf("%d\t",Arr[i]);                          // i번째 Array 값 출력
        }
    }
    Output : 0    1    2    3    4    5    6    7    8    9

'Computer Science > Algorithm' 카테고리의 다른 글

Quick Sort (퀵 정렬)  (0) 2020.04.01
Merge Sort (합병 정렬)  (0) 2020.03.31
Bubble Sort (거품 정렬)  (0) 2020.03.30
Insertion Sort (삽입 정렬)  (0) 2020.03.29
Comments