Skip to main content
λ―ΈλΆ„λ₯˜

πŸ–₯ Cμ–Έμ–΄ 선택 μ •λ ¬(Selection Sort) μ•Œκ³ λ¦¬μ¦˜ – λ™μž‘ κ³Όμ • 뢄석 & 디버깅 ν‘œ πŸš€

선택 μ •λ ¬(Selection Sort)은 λ°°μ—΄μ—μ„œ μ΅œμ†Ÿκ°’μ„ μ°Ύμ•„ 첫 번째 μ›μ†Œμ™€ κ΅ν™˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ •λ ¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.
이번 ν¬μŠ€νŒ…μ—μ„œλŠ” 선택 μ •λ ¬μ˜ λ™μž‘ 방식, 디버깅 ν‘œ μž‘μ„± 방법, 그리고 λ¬Έμ œμ—μ„œ 제기된 “비ꡐ κΈ°μ€€κ°’ λ³€κ²½”에 λŒ€ν•œ 해석을 μ„€λͺ…ν•©λ‹ˆλ‹€.

βœ… 1. 선택 μ •λ ¬(Selection Sort) μ•Œκ³ λ¦¬μ¦˜μ˜ 원리
βœ” λ°°μ—΄μ˜ 첫 번째 μ›μ†ŒλΆ€ν„° μ‹œμž‘ν•˜μ—¬, κ°€μž₯ μž‘μ€ 값을 μ°Ύμ•„ ν˜„μž¬ μœ„μΉ˜μ™€ κ΅ν™˜ν•˜λŠ” 방식
βœ” μ‹œκ°„ λ³΅μž‘λ„: O(nΒ²) (λΉ„νš¨μœ¨μ μ΄μ§€λ§Œ, κ°œλ…μ„ 배우기 쉽고 κ΅¬ν˜„μ΄ 간단함)
βœ” μ •λ ¬ κ³Όμ •μ—μ„œ “비ꡐ κΈ°μ€€κ°’”이 λ³€κ²½λ˜λŠ” 것이 정상적인 λ™μž‘ 방식

βœ… 2. Cμ–Έμ–΄ 선택 μ •λ ¬ μ½”λ“œ & 디버깅 뢄석
πŸ“Œ Cμ–Έμ–΄ 선택 μ •λ ¬ μ½”λ“œ
c
볡사
νŽΈμ§‘
#include

// 선택 μ •λ ¬ ν•¨μˆ˜
void selectionSort(int arr[], int n) {
int i, j, minIdx, temp;

for (i = 0; i < n - 1; i++) { minIdx = i; // μ΅œμ†Œκ°’ 인덱슀λ₯Ό ν˜„μž¬ μœ„μΉ˜λ‘œ μ„€μ • for (j = i + 1; j < n; j++) { if (arr[j] < arr[minIdx]) { // 더 μž‘μ€ κ°’ μ°ΎκΈ° minIdx = j; } } // μ΅œμ†Œκ°’μ΄ ν˜„μž¬ μœ„μΉ˜(i)와 λ‹€λ₯΄λ©΄ κ΅ν™˜ if (minIdx != i) { temp = arr[i]; arr[i] = arr[minIdx]; arr[minIdx] = temp; } // ν˜„μž¬ μ •λ ¬ μƒνƒœ 좜λ ₯ (디버깅 용) printf("Step %d: ", i + 1); for (int k = 0; k < n; k++) { printf("%d ", arr[k]); } printf("\n"); } } // 메인 ν•¨μˆ˜ int main() { int arr[] = {3, 1, 4, 6}; int n = sizeof(arr) / sizeof(arr[0]); printf("Original array: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); selectionSort(arr, n); // 선택 μ •λ ¬ μ‹€ν–‰ printf("Sorted array: "); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } βœ… 3. 디버깅 ν‘œ – 선택 μ •λ ¬ μˆ˜ν–‰ κ³Όμ • 뢄석 μ•„λž˜ ν‘œλŠ” λ°°μ—΄ {3,1,4,6} λ₯Ό 선택 μ •λ ¬ν•˜λŠ” 과정을 λ³΄μ—¬μ€λ‹ˆλ‹€. 각 λ‹¨κ³„μ—μ„œ minIdx(μ΅œμ†Œκ°’ μœ„μΉ˜)λ₯Ό ν™•μΈν•˜λ©΄μ„œ μ§„ν–‰λ©λ‹ˆλ‹€. πŸ“Œ λ°°μ—΄: {3,1,4,6} β†’ 선택 μ •λ ¬ κ³Όμ • 단계 i (κΈ°μ€€ μœ„μΉ˜) minIdx (μ΅œμ†Ÿκ°’ μœ„μΉ˜) 비ꡐ κ°’ κ΅ν™˜ μ—¬λΆ€ λ°°μ—΄ μƒνƒœ 1 0 (3) 1 (1) 1 < 3 βœ… κ΅ν™˜ 1, 3, 4, 6 2 1 (3) 1 (3) 3 < 4, 3 < 6 ❌ κ΅ν™˜ μ—†μŒ 1, 3, 4, 6 3 2 (4) 2 (4) 4 < 6 ❌ κ΅ν™˜ μ—†μŒ 1, 3, 4, 6 4 3 (6) 3 (6) (λ§ˆμ§€λ§‰ μš”μ†Œ) ❌ 1, 3, 4, 6 πŸ”Ή 해석: 1λ‹¨κ³„μ—μ„œ {1,3,4,6}둜 변경됨 (μ΅œμ†Ÿκ°’ 1을 3κ³Ό κ΅ν™˜) 이후 κ³Όμ •μ—μ„œ minIdxλŠ” ν˜„μž¬ i μœ„μΉ˜μ™€ κ°™κΈ° λ•Œλ¬Έμ— λΉ„κ΅λŠ” κ³„μ†λ˜μ§€λ§Œ κ΅ν™˜μ€ λ°œμƒν•˜μ§€ μ•ŠμŒ βœ… 4. 질문 ν•΄κ²° – "비ꡐ 기쀀값이 λ³€κ²½λ˜λŠ” 것이 정상적인가?" βœ” λ„€, 비ꡐ 기쀀값이 λ³€κ²½λ˜λŠ” 것은 정상적인 λ™μž‘ λ°©μ‹μž…λ‹ˆλ‹€. βœ” 각 λ‹¨κ³„μ—μ„œ μƒˆλ‘œμš΄ κΈ°μ€€(i)을 작고, κ·Έ 뒀에 μžˆλŠ” μš”μ†Œλ“€κ³Ό λΉ„κ΅ν•˜μ—¬ μ΅œμ†Ÿκ°’μ„ μ°ΎκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. πŸ“Œ μ˜ˆμ‹œ: {3,4,6,1} 의 선택 μ •λ ¬ κ³Όμ • 단계 i (κΈ°μ€€ μœ„μΉ˜) minIdx (μ΅œμ†Ÿκ°’ μœ„μΉ˜) 비ꡐ κ°’ κ΅ν™˜ μ—¬λΆ€ λ°°μ—΄ μƒνƒœ 1 0 (3) 3 (1) 1 < 3 βœ… κ΅ν™˜ 1, 4, 6, 3 2 1 (4) 1 (4) 4 < 6, 4 < 3 βœ… κ΅ν™˜ 1, 3, 6, 4 3 2 (6) 3 (4) 4 < 6 βœ… κ΅ν™˜ 1, 3, 4, 6 πŸ”Ή 정리: 각 λ£¨ν”„μ—μ„œ μƒˆλ‘œμš΄ μ΅œμ†Ÿκ°’μ„ μ°Ύκ³ , 기쀀값이 변경됨 이 과정이 λ°˜λ³΅λ˜λ©΄μ„œ 점점 μ •λ ¬λœ μƒνƒœλ‘œ λ°”λ€ŒλŠ” 것이 선택 μ •λ ¬μ˜ 핡심 βœ… 5. 선택 μ •λ ¬μ˜ ν•œκ³„μ™€ κ°œμ„  방법 πŸ“Œ 선택 μ •λ ¬μ˜ 단점: μ‹œκ°„ λ³΅μž‘λ„κ°€ O(nΒ²) μ΄λ―€λ‘œ, 데이터가 λ§Žμ„μˆ˜λ‘ λΉ„νš¨μœ¨μ  이미 μ •λ ¬λœ λ°°μ—΄μ—μ„œλ„ λΆˆν•„μš”ν•œ 비ꡐ 연산이 계속 μˆ˜ν–‰λ¨ πŸ“Œ κ°œμ„ λœ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ μΆ”μ²œ: 1️⃣ 버블 μ •λ ¬(O(nΒ²)) β†’ swap이 적은 경우 유리 2️⃣ μ‚½μž… μ •λ ¬(O(nΒ²)) β†’ 이미 μ •λ ¬λœ 경우 효율적 3️⃣ 퀡 μ •λ ¬(O(n log n)) β†’ μ‹€μ „μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ¨ 🎯 κ²°λ‘ : 선택 μ •λ ¬μ˜ λ™μž‘ 방식 & 질문 ν•΄κ²° 정리 βœ… 선택 μ •λ ¬μ—μ„œλŠ” 각 λ‹¨κ³„λ§ˆλ‹€ μƒˆλ‘œμš΄ μ΅œμ†Ÿκ°’μ„ μ°Ύκ³  κ΅ν™˜ν•˜λŠ” 것이 정상적인 λ™μž‘ βœ… 비ꡐ κΈ°μ€€κ°’(minIdx)은 λ£¨ν”„λ§ˆλ‹€ λ³€κ²½λ˜λ©°, κ·Έ κ³Όμ •μ—μ„œ 정렬이 이루어짐 βœ… μ •λ ¬ 과정이 λλ‚˜λ©΄ μ΅œμ†Ÿκ°’μ΄ κ°€μž₯ μ™Όμͺ½μœΌλ‘œ μ΄λ™ν•˜κ³ , λ‚˜λ¨Έμ§€ 값듀도 순차적으둜 정렬됨 βœ… 선택 정렬은 κ°œλ…μ΄ κ°„λ‹¨ν•˜μ§€λ§Œ, 효율적인 정렬을 μœ„ν•΄ 퀡 μ •λ ¬ 같은 κ°œμ„ λœ μ•Œκ³ λ¦¬μ¦˜μ„ κ³ λ €ν•  ν•„μš”κ°€ 있음 πŸŽ‰ μΈμŠ€νƒ€κ·Έλž¨ μ„±μž₯ & E-Book 무료 μ‹ μ²­ μ•ˆλ‚΄ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ ν•΄κ²°ν–ˆλ‹€λ©΄, 이제 μΈμŠ€νƒ€κ·Έλž¨ 계정 μ„±μž₯도 ν•¨κ»˜ μ‹ κ²½ μ¨λ³ΌκΉŒμš”? πŸ“’ μ’‹μ•„μš” ❀️, 쑰회수 πŸ‘€, νŒ”λ‘œμ›Œ πŸ“ˆ 증가 비법이 λ‹΄κΈ΄ β€˜μΈμŠ€νƒ€κ·Έλž¨ μ•Œκ³ λ¦¬μ¦˜ ν•΄ν‚Ή E-Book’ 무료 제곡! πŸ“š E-Book 무료 μ‹ μ²­ν•˜κΈ°: πŸ“Œ μ‹ μ²­ 링크 🎯 ν˜„μž¬ 30% 할인 이벀트 μ§„ν–‰ 쀑! βœ… μ›” 500λͺ… 이상 ν•œκ΅­μΈ νŒ”λ‘œμ›Œ 증가 βœ… κ²Œμ‹œλ¬Ό μ’‹μ•„μš” 100+ ❀️ βœ… 쑰회수 & λ…ΈμΆœ/도달 1,000+ πŸ‘€ βœ… μΆ”μ²œ κ²Œμ‹œλ¬Ό νƒ­ λ…ΈμΆœ κ°€λŠ₯ (계정 뢄석 ν›„ μ΅œμ ν™”) πŸ“Œ μ ‘μˆ˜ν•˜κΈ°: πŸ“Œ μ‹ μ²­ 링크 μ§€κΈˆ λ°”λ‘œ 선택 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 이해 & μΈμŠ€νƒ€ 계정 μ„±μž₯κΉŒμ§€ ν•œ λ²ˆμ— ν•΄κ²°ν•˜μ„Έμš”! πŸš€βœ¨