Data Structure

선택 μ •λ ¬(Selection Sort)

래빡 2024. 3. 3. 22:00

선택 μ •λ ¬(Selection Sort)의 νŠΉμ§•

  • 선택 정렬은 배열을 μˆœνšŒν•˜λ©΄μ„œ 각 λ‹¨κ³„μ—μ„œ λ°°μ—΄μ˜ λ‚˜λ¨Έμ§€ λΆ€λΆ„ μ€‘μ—μ„œ μ΅œμ†Œκ°’μ„ μ°Ύμ•„ μ΅œμ†Œκ°’μ„ ν•΄λ‹Ή λ‹¨κ³„μ˜ μ‹œμž‘μ μ— μœ„μΉ˜ν•œ μš”μ†Œμ™€ κ΅ν™˜ν•œλ‹€. 이 과정을 λ°˜λ³΅ν•˜μ—¬ μ •λ ¬ν•œλ‹€.
  • 제자리 μ •λ ¬(In-place sorting): 선택 정렬은 좔가적인 배열을 ν•„μš”λ‘œ ν•˜μ§€ μ•ŠμœΌλ©°, λ°°μ—΄ λ‚΄μ—μ„œ μš”μ†Œλ“€μ˜ μœ„μΉ˜λ₯Ό κ΅ν™˜ν•˜μ—¬ μ •λ ¬ν•œλ‹€.
  • λΆˆμ•ˆμ • μ •λ ¬(Unstable sort): 선택 정렬은 λ™μΌν•œ 값을 κ°€μ§„ μš”μ†Œμ˜ μƒλŒ€μ  μˆœμ„œκ°€ μ •λ ¬ κ³Όμ •μ—μ„œ λ°”λ€” 수 μžˆλ‹€. λ™μΌν•œ μ›μ†Œκ°€ 초기 λ°°μ—΄μ—μ„œ κ°€μ§„ μˆœμ„œλ₯Ό λ³΄μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • 예λ₯Ό λ“€μ–΄, [4, 6, 3, 4, 2, 8] 배열에 μ€‘λ³΅λœ 값이 μžˆμ„ λ•Œ, μ •λ ¬ κ³Όμ •μ—μ„œ 이 두 4 쀑 μ–΄λŠ ν•˜λ‚˜κ°€ λ‹€λ₯Έ μœ„μΉ˜λ‘œ 이동할 λ•Œ, κ·Έλ“€ μ‚¬μ΄μ˜ μ›λž˜ μˆœμ„œκ°€ λ°”λ€” 수 μžˆλ‹€. 즉, 처음 λ°°μ—΄μ—μ„œ μ•žμ— 있던 4κ°€ μ •λ ¬ ν›„μ—λŠ” 뒀에 있던 4 λ’€λ‘œ 이동할 수 μžˆμ–΄, 두 4의 μƒλŒ€μ μΈ μˆœμ„œκ°€ λ’€λ°”λ€Œκ²Œλœλ‹€.

selection-sort Animation μ°Έκ³ 

 

Selection Sort - Sorting Algorithm Animations

Animation, code, analysis, and discussion of selection sort on 4 initial conditions.

www.toptal.com

sorting μ°Έκ³ 

 

Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix) - VisuAlgo

VisuAlgo is generously offered at no cost to the global Computer Science community. If you appreciate VisuAlgo, we kindly request that you spread the word about its existence to fellow Computer Science students and instructors. You can share VisuAlgo throu

visualgo.net


예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같은 배열이 μžˆλ‹€.
μž‘μ€ μˆ˜λΆ€ν„° 큰 수둜 λ‚˜μ—΄ν•œλ‹€κ³  ν–ˆμ„ λ•Œ,

 

첫 번째 순회

λ°°μ—΄ 전체 [4, 6, 3, 2, 8]μ—μ„œ μ΅œμ†Œκ°’ 2λ₯Ό μ°Ύμ•„ 첫번째 μœ„μΉ˜μ˜ 4와 κ΅ν™˜ν•œλ‹€.
2와 첫 번째 μœ„μΉ˜μ˜ 4λ₯Ό κ΅ν™˜ν•©λ‹ˆλ‹€.
κ²°κ³Ό: [2, 6, 3, 4, 8]

 

두 번째 순회

남은 λ°°μ—΄ [6, 3, 4, 8]μ—μ„œ μ΅œμ†Œκ°’ 3을 μ°Ύμ•„ ν˜„μž¬ 순회의 μ‹œμž‘ μœ„μΉ˜μΈ 6을 κ΅ν™˜ν•œλ‹€.
κ²°κ³Ό: [2, 3, 6, 4, 8]

 

μ„Έ 번째 순회

남은 λ°°μ—΄ [6, 4, 8]μ—μ„œ μ΅œμ†Œκ°’ 4λ₯Ό μ°Ύμ•„ ν˜„μž¬ 순회의 μ‹œμž‘ μœ„μΉ˜μΈ 6을 κ΅ν™˜ν•œλ‹€.
4와 ν˜„μž¬ 순회의 μ‹œμž‘ μœ„μΉ˜μΈ 6을 κ΅ν™˜ν•©λ‹ˆλ‹€.
κ²°κ³Ό: [2, 3, 4, 6, 8]

 

λ„€ 번째 순회

남은 λ°°μ—΄ [6, 8]μ—μ„œ 6이 이미 μ΅œμ†Œκ°’μ΄λ―€λ‘œ κ΅ν™˜ 없이 μœ μ§€ν•œλ‹€.
κ²°κ³Ό: [2, 3, 4, 6, 8]

Big-O

  • μ‹œκ°„ λ³΅μž‘λ„: O(n²) (best case : O(n²) (이미 정렬이 λ˜μ–΄ μžˆλŠ” 경우))
    • Best: O(n²)
    • Averrage: O(n²)
    • Worst: O(n²)
  • 곡간 λ³΅μž‘λ„: O(1)

μž₯점

  • 제자리 μ •λ ¬(In-place sorting): 좔가적인 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , μ£Όμ–΄μ§„ κ³΅κ°„λ§Œ μ΄μš©ν•΄μ„œ μ •λ ¬ν•œλ‹€.(곡간 λ³΅μž‘λ„: O(1)) λ©”λͺ¨λ¦¬ 곡간을 μ ˆμ•½ν•  수 μžˆλ‹€.
  • 선택 정렬은 κ΅ν™˜ νšŸμˆ˜κ°€ 비ꡐ적 적어, 데이터 이동이 λΉ„μš©μ΄ 많이 λ“œλŠ” μƒν™©μ—μ„œ μœ λ¦¬ν•  수 μžˆλ‹€.

단점

  • 데이터 양이 λ§Žμ•„μ§ˆμˆ˜λ‘ μ„±λŠ₯이 μ’‹μ§€ μ•Šλ‹€. λŒ€μš©λŸ‰ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” λΆ€μ ν•©ν•˜λ‹€.
  • λΆˆμ•ˆμ • μ •λ ¬: λ™μΌν•œ 값을 κ°€μ§„ μš”μ†Œμ˜ μƒλŒ€μ  μˆœμ„œκ°€ μ •λ ¬ κ³Όμ •μ—μ„œ λ°”λ€” 수 μžˆλ‹€.
  • μ΅œμ„ , 평균, μ΅œμ•…μ˜ 경우 λͺ¨λ‘ O(n²) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.

Javascript Algorithm

μ•„λž˜ μ†ŒμŠ€λŠ” 선택 정렬을 μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„ν•œ μ†ŒμŠ€μ΄λ‹€.

function selectionSort(arr) {
    for(let i = 0; i < arr.length; i++) {
        let index = i;
        for(let j = i + 1; j < arr.length; j++) {
            if(arr[j] < arr[index]) {
                index = [j]
            }
        }
        let temp = arr[i];
        arr[i] = arr[index];
        arr[index] = temp;
    }
    return arr;
}

selectionSort([1, 5, 3, 2, 6]);