Merge Sort: 두 판 사이의 차이
IT 위키
| AlanTuring (토론 | 기여)  (새 문서: '''Merge Sort''' is a divide-and-conquer sorting algorithm that recursively splits an array into smaller subarrays, sorts them, and then merges the sorted subarrays to produce the final sorted array. It guarantees a worst-case time complexity of O(n log n). ==Algorithm Overview== Merge Sort follows these steps: #'''Divide:''' Recursively split the array into two halves until each subarray has one element. #'''Conquer:''' Sort the subarrays (trivial for single-element arrays). #'...) | 편집 요약 없음 | ||
| 80번째 줄: | 80번째 줄: | ||
| *[[Time Complexity]] | *[[Time Complexity]] | ||
| *[[Stable Sorting]] | *[[Stable Sorting]] | ||
| [[ | [[Category:Algorithm]] | ||
2025년 2월 3일 (월) 02:57 기준 최신판
Merge Sort is a divide-and-conquer sorting algorithm that recursively splits an array into smaller subarrays, sorts them, and then merges the sorted subarrays to produce the final sorted array. It guarantees a worst-case time complexity of O(n log n).
Algorithm Overview[편집 | 원본 편집]
Merge Sort follows these steps:
- Divide: Recursively split the array into two halves until each subarray has one element.
- Conquer: Sort the subarrays (trivial for single-element arrays).
- Merge: Combine the sorted subarrays into a single sorted array.
Example[편집 | 원본 편집]
Sorting [38, 27, 43, 3, 9, 82, 10] using Merge Sort:
- Split: [38, 27, 43, 3] and [9, 82, 10]
- Split further: [38, 27], [43, 3], [9, 82], [10]
- Base case: Single elements remain → Merge back:
- Merge [38] and [27] → [27, 38]
- Merge [43] and [3] → [3, 43]
- Merge [9] and [82] → [9, 82]
- Merge [27, 38] and [3, 43] → [3, 27, 38, 43]
- Merge [9, 82] and [10] → [9, 10, 82]
- Merge [3, 27, 38, 43] and [9, 10, 82] → [3, 9, 10, 27, 38, 43, 82]
 
Implementation[편집 | 원본 편집]
A simple implementation of Merge Sort in Python:
def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    return merge(left, right)
def merge(left, right):
    sorted_list = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            sorted_list.append(left[i])
            i += 1
        else:
            sorted_list.append(right[j])
            j += 1
    sorted_list.extend(left[i:])
    sorted_list.extend(right[j:])
    return sorted_list
arr = [38, 27, 43, 3, 9, 82, 10]
print(merge_sort(arr))
Time Complexity[편집 | 원본 편집]
Merge Sort has a time complexity of:
- Best case: O(n log n) (Even if already sorted, it still splits and merges)
- Average case: O(n log n)
- Worst case: O(n log n) (Fully reversed array)
Space Complexity[편집 | 원본 편집]
- O(n) – Requires additional space to store subarrays during merging.
Comparison with Other Sorting Algorithms[편집 | 원본 편집]
| Algorithm | Time Complexity (Worst) | Space Complexity | Stable | In-Place | 
|---|---|---|---|---|
| Merge Sort | O(n log n) | O(n) | Yes | No | 
| Quick Sort | O(n²) | O(log n) | No | Yes | 
| Bubble Sort | O(n²) | O(1) | Yes | Yes | 
| Heap Sort | O(n log n) | O(1) | No | Yes | 
Advantages[편집 | 원본 편집]
- Stable Sorting Algorithm: Maintains relative order of equal elements.
- Guaranteed O(n log n) Complexity: Unlike Quick Sort, it does not degrade to O(n²).
- Efficient for Linked Lists: Unlike array-based sorting, linked lists benefit from its merging process.
Limitations[편집 | 원본 편집]
- Not In-Place: Requires additional memory for merging subarrays.
- Slower for Small Datasets: Algorithms like Insertion Sort can be faster for small n.
Applications[편집 | 원본 편집]
- Sorting large datasets where stability is required.
- External sorting when data is too large to fit into memory.
- Merging linked lists efficiently.

