선택 정렬 (Selection Sort) 설명과 JavaScript 예제

2025. 5. 21. 08:33·Programing/Algorithm
반응형

선택 정렬은 배열에서 가장 작은 값을 찾아 앞쪽으로 하나씩 정렬해 나가는 단순한 방식의 정렬 알고리즘입니다. 구현이 쉽고 직관적이지만, 성능 면에서는 비효율적이기 때문에 실제 애플리케이션보다는 교육용으로 자주 사용됩니다.


1. 동작 원리

  1. 배열의 첫 번째 요소부터 시작
  2. 남은 요소 중 가장 작은 값을 찾아 현재 위치와 교환
  3. 인덱스를 한 칸 뒤로 옮기고 같은 작업 반복
  4. 배열의 끝까지 반복하면 정렬 완료

정리하면, "가장 작은 값을 선택해서 앞으로 보낸다"는 의미에서 선택 정렬이라 불립니다.


2. JavaScript 예제 - 오름차순 정렬

function selectionSort(arr) {
  const len = arr.length;
  for (let i = 0; i < len - 1; i++) {
    let minIndex = i;
    for (let j = i + 1; j < len; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    if (minIndex !== i) {
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
  }
  return arr;
}

console.log(selectionSort([29, 10, 14, 37, 13])); // [10, 13, 14, 29, 37]
  • minIndex: 현재 가장 작은 값의 인덱스를 저장
  • ES6 구조 분해 할당을 사용하여 값 교환
  • 비교는 모든 요소에 대해 반복하지만, 교환은 한 번만 수행

3. 시간 및 공간 복잡도

상황
시간 복잡도
최선의 경우 O(n^2)
평균 O(n^2)
최악의 경우 O(n^2)
  • 비교 횟수는 고정: 항상 (n-1) + (n-2) + ... + 1 ≒ O(n²)
  • 교환 횟수는 최소화됨: 다른 정렬 알고리즘보다 스왑은 적음
  • 공간 복잡도는 O(1) – 추가 메모리 사용 없음

4. 선택 정렬의 특징

  • 구현이 간단하고 직관적
  • 정렬이 완료된 상태와 무관하게 항상 같은 수의 비교 수행
  • 작은 데이터셋에서는 사용 가능하나, 대규모 데이터에는 부적합

마무리

선택 정렬은 단순하고 명확한 알고리즘으로, 정렬의 개념을 이해하기에 좋은 시작점입니다. 그러나 성능상의 한계로 인해 실제 프로젝트에서는 퀵 정렬(Quick Sort), 병합 정렬(Merge Sort), 힙 정렬(Heap Sort) 등 효율적인 정렬 알고리즘을 사용하는 것이 일반적입니다.

팁: 정렬 알고리즘을 비교할 때는 비교 횟수와 교환 횟수, 공간 복잡도를 함께 고려해야 합니다.

반응형

'Programing > Algorithm' 카테고리의 다른 글

계수 정렬 (Counting Sort) 설명과 JavaScript 예제  (0) 2025.05.22
퀵 정렬 (Quick Sort) 설명과 JavaScript 예제  (1) 2025.05.22
병합 정렬 (Merge Sort) 설명과 JavaScript 예제  (1) 2025.05.21
삽입 정렬 (Insertion Sort) 설명과 JavaScript 예제  (0) 2025.05.21
버블 정렬 (Bubble Sort) 설명과 JavaScript 예제  (0) 2025.05.21
jvascript array 경우의 수 구하기 (permute)  (0) 2022.02.15
LRU Cache (Least Recently Used) / 프로그래머스 캐시  (0) 2022.01.19
콜라츠 추측  (0) 2021.08.27
'Programing/Algorithm' 카테고리의 다른 글
  • 병합 정렬 (Merge Sort) 설명과 JavaScript 예제
  • 삽입 정렬 (Insertion Sort) 설명과 JavaScript 예제
  • 버블 정렬 (Bubble Sort) 설명과 JavaScript 예제
  • jvascript array 경우의 수 구하기 (permute)
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (457) N
      • 금융 (61)
      • Programing (280) N
        • Algorithm (39) N
        • API (2)
        • javascript (121)
        • CSS (6)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (17)
        • MS-SQL (1)
        • MySQL (12)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (5)
      • IT 일반 (15)
      • 리뷰 (1) N
        • Book (17)
        • 제품 (2) N
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (31)
        • 회고 (2)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    IT 관련
    위시리스트
    사고 싶은 책
    jsp
    iT's MY LiFE
    IT블로그
    SQL
    It
    자바
    읽고 싶은 책
    기초
    js패턴
    블로그
    JavaScript
    IT·컴퓨터
    자바스크립트
    Java
    디자인패턴
    자바스크립트유틸
    php
  • hELLO· Designed By정상우.v4.10.3
Dongkkase
선택 정렬 (Selection Sort) 설명과 JavaScript 예제
상단으로

티스토리툴바