병합 μ •λ ¬(Merge Sort)μ΄λž€?

2021. 12. 21. 22:34Β·πŸ“š 자료ꡬ쑰 및 μ•Œκ³ λ¦¬μ¦˜/μ •λ ¬ 및 탐색
728x90

Merge Sort(병합 μ •λ ¬)

병합 정렬은 뢄할정볡(Divide and Conquer)의 λŒ€ν‘œμ μΈ μ˜ˆμ΄λ‹€. n개의 데이터λ₯Ό κ°€μ§„ 배열을 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜κΈ° μœ„ν•΄ 병합정렬을 μ‚¬μš©ν•œλ‹€λ©΄ μ•„λž˜μ™€ 같은 3λ‹¨κ³„μ˜ 과정을 거치게 λœλ‹€. 

 

1. Divide(λΆ„ν• ) : n개의 μ›μ†Œλ₯Ό κ°–λŠ” 배열을 n/2 개의 μ›μ†Œλ₯Ό κ°–λŠ” μž‘μ€λ°°μ—΄ 2개둜 λ‚˜λˆˆλ‹€.
2. Conquer(정볡) : 각각의 μž‘μ€ 배열듀을 μ •λ ¬ν•œλ‹€. 
3. Combine(병합) : μ •λ ¬λœ μž‘μ€ 배열듀을 λ³‘ν•©ν•œλ‹€. 

 

예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같은 과정을 거치게 λœλ‹€. 

 

 


λ³‘ν•©μ •λ ¬μ˜ νŠΉμ§•

  • 병합정렬은 λΆ„ν• ν•œ μž‘μ€ 배열을 μœ„ν•œ μ €μž₯곡간이 λ”°λ‘œ ν•„μš”ν•˜λ‹€. n개의 μ›μ†Œλ₯Ό n/2 κ°œμ”© λ‚˜λˆ„λ―€λ‘œ λ³‘ν•©μ •λ ¬μ˜ κ³΅κ°„λ³΅μž‘λ„λŠ” O(n)이닀. λ”°λΌμ„œ not-in place μ •렬이닀.
  • μ‹œκ°„ λ³΅μž‘λ„λŠ” O(nlogn)이닀.
  • μ‚½μž… 정렬은 μ€‘λ³΅λœ ν‚€ κ°’μ˜ μˆœμ„œκ°€ μ •λ ¬ 후에도 μœ μ§€λ˜λ―€λ‘œ stable μ •렬이닀.

μ†ŒμŠ€μ½”λ“œ

void merge(int arr[], int left, int mid, int right) {
    int i, j, k, l;
    i = left;
    j = mid + 1;
    k = left;

    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j])
            sorted[k++] = arr[i++];
        else
            sorted[k++] = arr[j++];
    }

    if (i > mid) {
        for (l = j; l <= right; l++) 
            sorted[k++] = arr[l];
        
    }
    else {
        for (l = i; l <= mid; l++)
            sorted[k++] = arr[l];
    }

    for (l = left; l <= right; l++) {
        arr[l] = sorted[l];
    }
}

void merge_sort(int arr[], int left, int right) {
    int mid;
    if (left < right) {
        mid = (left + right) / 2;
        merge_sort(arr, left, mid);
        merge_sort(arr, mid + 1, right);
        merge(arr, left, mid, right);
    }
}




728x90
'πŸ“š 자료ꡬ쑰 및 μ•Œκ³ λ¦¬μ¦˜/μ •λ ¬ 및 탐색' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [μ•Œκ³ λ¦¬μ¦˜] μœ„μƒ μ •λ ¬(Topological Sort)μ΄λž€?
  • [자료ꡬ쑰] νž™μ •λ ¬(Heap Sort)μ΄λž€?
  • μ •λ ¬(Sort Algorithm)μ΄λž€?
  • 퀡정렬(QuickSort)μ΄λž€?
juno1105
juno1105
κ³΅λΆ€ν•˜λŠ” κ²Έ 포폴 λΈ”λ‘œκ·Έ
  • juno1105
    @juno1105
    juno1105
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (89)
      • πŸ’¬ 자유 (3)
      • πŸ“– μ–΄ν•™ 곡뢀 (0)
      • πŸ“” 개발 ν”„λ‘œμ νŠΈ (4)
      • πŸ›  ν”„λ‘œκ·Έλž¨ 였λ₯˜ 해결법 (1)
      • πŸ“š 자료ꡬ쑰 및 μ•Œκ³ λ¦¬μ¦˜ (53)
        • μŠ€νƒ (4)
        • 큐 (4)
        • μ •λ ¬ 및 탐색 (17)
        • 리슀트 (5)
        • ν•΄μ‹œ (1)
        • 트리 (8)
        • νž™ (2)
        • κ·Έλž˜ν”„ (12)
      • πŸ’» 컴퓨터 ꡬ쑰 (0)
      • πŸš₯ λ…Όλ¦¬νšŒλ‘œ (8)
      • πŸ”° λ°±μ€€ (20)
        • 큐, μŠ€νƒ, 덱 (0)
        • DFS 와 BFS (3)
        • 그리디 (0)
        • λ™μ κ³„νšλ²• 1 (16)
        • λ™μ κ³„νšλ²• 2 (0)
        • μ΅œλ‹¨ 경둜 (0)
        • 트리 (0)
        • λ°±νŠΈλž˜ν‚Ή (0)
        • μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ (0)
        • μ§‘ν•©κ³Ό λ§΅ (1)
      • 🌈 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (0)
      • πŸ“± μ•ˆλ“œλ‘œμ΄λ“œ μ•± (0)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

    • ✨자료ꡬ쑰 μ•Œκ³ λ¦¬μ¦˜ 컀리큘럼✨
  • 인기 κΈ€

  • νƒœκ·Έ

    토읡 950점
    μ•Œκ³ λ¦¬μ¦˜
    μ •λ ¬ μ΅œμ„ μ˜ 경우
    μ •λ ¬
    μ‹œκ°„λ³΅μž‘λ„
    토읡 900
    토읡 900μ λŒ€
    λΉ…μ˜€ν‘œκΈ°λ²•
    토읡 900점
    토읡
    μ΅œλ‹¨κ²½λ‘œ
    토읡 910점
    토읡 920점
    κ·Έλž˜ν”„νƒμƒ‰
    μ •λ ¬ μ΅œμ•…μ˜ 경우
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
juno1105
병합 μ •λ ¬(Merge Sort)μ΄λž€?
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”