본문 바로가기
CS/자료구조

[자료구조] 선택정렬(Selection Sort)

by 코모's 2024. 1. 15.
반응형

선택정렬이란

- 버블정렬과 유사한 알고리즘으로, 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘이다.

- 첫번째 자료를 두번째 자료부터 마지막 자료까지 차례대로 비교해가면서 가장 우선순위가 높은 값을 찾아 배열 첫번째에 위치 시키고 원래 해당 자리에 있던 원소와 자리를 바꾼다.

- 시간 복잡도 : O(n^2)

 

# include <stdio.h>
# define SWAP(x, y, temp) ( (temp)=(x), (x)=(y), (y)=(temp) )
# define MAX_SIZE 5

// 선택 정렬
void selection_sort(int list[], int n){
  int i, j, least, temp;

  // 마지막 숫자는 자동으로 정렬되기 때문에 (숫자 개수-1) 만큼 반복한다.
  for(i=0; i<n-1; i++){
    least = i;

    // 최솟값을 탐색한다.
    for(j=i+1; j<n; j++){
      if(list[j]<list[least])
        least = j;
    }

    // 최솟값이 자기 자신이면 자료 이동을 하지 않는다.
    if(i != least){
        SWAP(list[i], list[least], temp);
    }
  }
}

void main(){
  int i;
  int n = MAX_SIZE;
  int list[n] = {9, 6, 7, 3, 5};

  // 선택 정렬 수행
  selection_sort(list, n);

  // 정렬 결과 출력
  for(i=0; i<n; i++){
    printf("%d\n", list[i]);
  }
}

 

 

참고자료 : https://gyoogle.dev/blog/algorithm/Selection%20Sort.html

반응형