μ ν μ λ ¬(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+ π β μΆμ² κ²μλ¬Ό ν λ ΈμΆ κ°λ₯ (κ³μ λΆμ ν μ΅μ ν) π μ μνκΈ°: π μ μ² λ§ν¬ μ§κΈ λ°λ‘ μ ν μ λ ¬ μκ³ λ¦¬μ¦ μ΄ν΄ & μΈμ€ν κ³μ μ±μ₯κΉμ§ ν λ²μ ν΄κ²°νμΈμ! πβ¨