[자료 구조와 알고리즘] 정렬 - 선택 정렬

2023. 5. 29. 20:42·📗 self-study/📗 inflearn

 

 

 

🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘

 

정렬 - 선택 정렬

 

 

 

 

📍 선택 정렬(Selection Sort)

👉🏻 배열의 정렬되지 않은 영역의 첫 번째 원소를 시작으로 마지막 원소까지 비교 후 가장 작은 값을 첫 번째 원소로 가지고 옴

 

<------ 영역 ----->
[6, 3, 4, 1, 2, 5] // 정렬되지 않은 영역(전체)를 순회 후 가장 작은 값 찾음: 1
 _        _
[1, 3, 4, 6, 2, 5] // 가장 작은 값을 첫 번째 원소로 가지고 옴

// 1은 정렬 완료

    <--- 영역 --->
[1, 3, 4, 6, 2, 5] // 순회 후 가장 작은 값 찾음: 2
    _        _
[1, 2, 4, 6, 3, 5] // 가장 작은 값을 첫 번째 원소로 가지고 옴

// 2까지 정렬 완료 
       <-- 영역 -->
[1, 2, 4, 6, 3, 5] // 순회 후 가장 작은 값 찾음: 3
       _     _
[1, 2, 3, 6, 4, 5] // 가장 작은 값을 첫 번째 원소로 가지고 옴

// 3까지 정렬 완료

...

[1, 2, 3, 4, 5, 6] // 정렬 끝

 

 

 

📍 선택 정렬의 구현

[ selection_sort.mjs ]

function SelectionSort(arr) {
    // 마지막 원소는 자동 정렬되기 때문에 n-1번 반복
    for(let i = 0; i < arr.length - 1; i++) {
        let minValueIndex = i;
        // 반복문 1번 진행할 때마다 최소값 1개가 정렬되므로 정렬된 영역은 반복에서 제외하기 위해 i로 설정
        
        for(let j = i + 1; j < arr.length; j++) {
            // i는 minValueIndex이므로 i+1부터 진행
            if(arr[j] < arr[minValueIndex]) {
                minValueIndex = j;
            }
        }
        // minValueIndex에는 가장 작은 값이 저장되어 있음
        // 이를 정렬되지 않은 원소의 첫 번째 원소와 교체
        
        let temp = arr[i];
        arr[i] = arr[minValueIndex];
        arr[minValueIndex] = temp;
    }
}

let arr = [4, 2, 1, 3];

console.log("===== 정렬 전 =====");
console.log(arr);

SelectionSort(arr);

console.log("===== 정렬 후 =====");
console.log(arr);

👉🏻 버블 정렬과 같은 O(n^2)의 성능을 가짐

 

 

 

📍 선택 정렬의 장단점

👉🏻 장점: 이해와 구현이 쉬움

👉🏻 단점: 성능이 좋지 않음

 

저작자표시 비영리 변경금지 (새창열림)
'📗 self-study/📗 inflearn' 카테고리의 다른 글
  • [자료 구조와 알고리즘] 정렬 - 병합 정렬
  • [자료 구조와 알고리즘] 정렬 - 삽입 정렬
  • [자료 구조와 알고리즘] 정렬 - 버블 정렬
  • [자료 구조와 알고리즘] 재귀 - 하노이 탑
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[자료 구조와 알고리즘] 정렬 - 선택 정렬
상단으로

티스토리툴바