Develop Diary/Interview

[interview] 선택 정렬 알고리즘에 대해 설명해주세요

wakelight23 2025. 2. 17. 22:28

선택 정렬 (Selection Sort) 알고리즘

● 배열에서 정렬되지 않은 부분의 최솟값, 최댓값을 찾아 순서대로 정렬된 부분의 뒤로 옮기는
   방식의 정렬 알고리즘입니다.

 

● 반복문을 사용하여 전체 배열을 순차적으로 정렬하기 때문에 시간 복잡도는
   BigO 기법으로 O(n^2)입니다.

 

선택 정렬 진행 순서

1) 초기화

 - 정렬되지 않은 배열 전체를 대상으로 탐색을 시작합니다.

  [2, 5, 4, 1, 3]

 

2) 최솟값(최댓값) 탐색

  - 배열의 시작 인덱스부터 끝까지 탐색하여 최솟값(최댓값)을 찾습니다.

  [2, 5, 4, 1, 3]

 

3) 스왑(Swap)

  - 찾은 최솟값을 현재 위치의 값과 교환합니다.

  [2, 5, 4, 1, 3] → [1, 5, 4, 2, 3]

 

4) 반복

  - 배열의 다음 요소부터 끝까지 동일한 과정을 반복하여 전체 배열이 정렬될 때까지
    진행합니다.

  [2, 5, 4, 1, 3] → [1, 5, 4, 2, 3] → [1, 2, 4, 5, 3] → [1, 2, 3, 5, 4] → [1, 2, 3, 4, 5]

 

● 정리하자면 
  - 정렬되지 않은 배열 전체를 대상으로 배열의 시작 인덱스부터 끝까지 탐색하여 최솟값(최댓값)
    을 찾고, 최솟값(최댓값)을 찾았을 경우 현재 위치의 값과 교환합니다. 이 과정을 반복하고 배열이
    정렬될 때가지 진행하는 정렬 알고리즘 입니다.

 

JavaScript로 표현해보자면

// 최솟값을 기준으로 정렬
function selectionSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    // 현재 위치에서 최소값의 인덱스를 설정합니다.
    let min = i;
    // i 이후의 요소들 중에서 최솟값을 찾습니다.
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[min]) {
        min = j;
      }
    }
    // 만약 최소값이 현재 위치가 아니면 교환합니다.
    if (min !== i) {
      const temp = arr[i];
      arr[i] = arr[min];
      arr[min] = temp;
    }
  }
  return arr;
}

// 예시 사용
const unsortedArray = [64, 25, 12, 22, 11];
const sortedArray = selectionSort(unsortedArray);
console.log(sortedArray); // 출력: [11, 12, 22, 25, 64]

 

효율적인 알고리즘인가요?

● 구현은 간단하지만 작은 데이터셋에서는 적합하지만, 대규모 데이터셋에서는 굳이 사용할 필요가 없습니다.

   선택 정렬 알고리즘보다 효율적인 다른 알고리즘이 더 많습니다.

 

● 하지만 가장 기본적인 정렬 알고리즘이기 때문에 '정렬은 이런 것이다' 를 이해하기에는 좋은 알고리즘입니다.