λ°μν
π§© λ³ν© μ λ ¬ (Merge Sort) – νμ μμ μ μΈ λΆν μ 볡 μ λ ¬
1. κ°λ
λ³ν© μ λ ¬μ λΆν μ 볡(Divide and Conquer) μκ³ λ¦¬μ¦μ λν μμμ΄λ€.
λ°°μ΄μ λ°μΌλ‘ λλκ³ , λλ λ°°μ΄μ κ°κ° μ λ ¬ν ν, λ μ λ ¬λ λ°°μ΄μ **λ³ν©(merge)**νμ¬ μ΅μ’
μ λ ¬λ λ°°μ΄μ λ§λ λ€.
2. μλ λ°©μ μμ½
- λ°°μ΄μ λ°μΌλ‘ λΆν
- κ°κ°μ μ¬κ·μ μΌλ‘ λ³ν© μ λ ¬
- λ μ λ ¬λ λ°°μ΄μ μ λ ¬λ μνλ‘ λ³ν©
- λ μ΄μ λλ μ μμ λκΉμ§ λ°λ³΅
3. C# μμ μ½λ (μλ‘μ΄ μμ)
void MergeSort(int[] arr, int left, int right)
{
if (left >= right) return;
int mid = (left + right) / 2;
MergeSort(arr, left, mid);
MergeSort(arr, mid + 1, right);
Merge(arr, left, mid, right);
}
void Merge(int[] arr, int left, int mid, int right)
{
int[] temp = new int[right - left + 1];
int i = left;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= right)
{
if (arr[i] <= arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while (i <= mid)
temp[k++] = arr[i++];
while (j <= right)
temp[k++] = arr[j++];
// μλ λ°°μ΄μ 볡μ¬
for (int t = 0; t < temp.Length; t++)
arr[left + t] = temp[t];
}
β μ¬μ© μ:
int[] data = { 6, 2, 9, 1, 5 };
MergeSort(data, 0, data.Length - 1);
4. μκ°/κ³΅κ° λ³΅μ‘λ
κ²½μ° | μκ° λ³΅μ‘λ |
νκ· | O(n log n) |
μ΅μ | O(n log n) |
- κ³΅κ° λ³΅μ‘λ: O(n)
→ μ λ ¬μ μν΄ μμ λ°°μ΄μ΄ νμν¨
5. νΉμ§
- νμ μμ μ μΈ μκ° λ³΅μ‘λ O(n log n)
- μμ μ λ ¬ (λμΌ κ°μ μμ 보쑴)
- μΆκ° λ©λͺ¨λ¦¬ κ³΅κ° νμ (In-place μλ)
- ν° λ°μ΄ν°, μμ μ±μ΄ μ€μν κ²½μ°μ μ ν©
6. μμ
[4, 1, 3, 2]
→ λλκΈ°: [4, 1] / [3, 2]
→ μ λ ¬: [1, 4] / [2, 3]
→ λ³ν©: [1, 2, 3, 4]
7. λ§λ¬΄λ¦¬ μμ½
- λ³ν© μ λ ¬μ μκ° λ³΅μ‘λκ° νμ O(n log n)μΌλ‘ μμΈ‘ κ°λ₯νμ¬ μ λ’°λκ° λλ€.
- ν΅ μ λ ¬λ³΄λ€ λ릴 μ μμ§λ§, λ°μ΄ν°κ° μ λ ¬λ μνμ 무κ΄νκ² μμ μ μΈ μ±λ₯μ λΈλ€λ μ μμ κ°λ ₯ν μ νμ΄λ€.
- μΆκ° λ©λͺ¨λ¦¬κ° νμνλ€λ μ μ κ³ λ €ν΄μΌ νλ€.
λ°μν
'C#' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C# - νμ μκ³ λ¦¬μ¦ μ 리 β μ ν νμ vs μ΄μ§ νμ (0) | 2025.07.11 |
---|---|
C# - μ λ ¬ μκ³ λ¦¬μ¦ λΉκ΅ μμ½ (1) | 2025.07.11 |
C# - ν΅ μ λ ¬ (Quick Sort) (1) | 2025.07.11 |
C# - μ½μ μ λ ¬ (Insertion Sort) (0) | 2025.07.11 |
C# - μ λ ¬ μκ³ λ¦¬μ¦ β μ ν, μ½μ , ν΅, λ³ν© μ λ ¬ μκ°λ³΅μ‘λ λΉκ΅ (0) | 2025.07.11 |