병합 정렬 알고리즘을 모듈화하여 구현하고, 이를 테스트하는 방법을 설명하겠습니다. 이를 통해 분할 정복 알고리즘의 원리를 파이썬에서 어떻게 모듈화하고, 테스트하는지 살펴보겠습니다.
병합 정렬 모듈
우선 병합 정렬 알고리즘을 모듈로 분리합니다.
merge_sort.py
python
코드 복사
def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left_half = merge_sort(arr[:mid]) right_half = merge_sort(arr[mid:]) return merge(left_half, right_half) def merge(left, right): sorted_array = [] left_index, right_index = 0, 0 while left_index < len(left) and right_index < len(right): if left[left_index] < right[right_index]: sorted_array.append(left[left_index]) left_index += 1 else: sorted_array.append(right[right_index]) right_index += 1 sorted_array.extend(left[left_index:]) sorted_array.extend(right[right_index:]) return sorted_array
테스트 모듈
테스트 코드를 별도의 모듈로 분리하여, 병합 정렬 함수들을 테스트합니다.
test_merge_sort.py
python
코드 복사
import unittest from merge_sort import merge_sort class TestMergeSort(unittest.TestCase): def test_merge_sort(self): test_cases = [ { "input": [38, 27, 43, 3, 9, 82, 10], "expected": [3, 9, 10, 27, 38, 43, 82] }, { "input": [5, 2, 9, 1, 5, 6], "expected": [1, 2, 5, 5, 6, 9] }, { "input": [0], "expected": [0] }, { "input": [], "expected": [] } ] for case in test_cases: input_data = case["input"] expected_output = case["expected"] result = merge_sort(input_data) self.assertEqual(result, expected_output, f"Failed for input: {input_data}") if __name__ == "__main__": unittest.main()
설명
- merge_sort.py:
- merge_sort 함수와 merge 함수를 정의하여 병합 정렬 알고리즘을 구현합니다.
- 이 파일은 병합 정렬 알고리즘의 핵심 로직을 포함하는 모듈입니다.
- test_merge_sort.py:
- unittest 모듈을 사용하여 테스트 케이스를 작성합니다.
- test_merge_sort 메서드는 여러 테스트 케이스를 정의하고, 각 테스트 케이스에 대해 merge_sort 함수를 호출하여 결과가 예상과 일치하는지 확인합니다.
- unittest.main()을 호출하여 테스트를 실행합니다.
실행 방법
터미널에서 다음 명령어를 실행하여 테스트를 수행할 수 있습니다:
sh
코드 복사
python test_merge_sort.py
이 예제는 분할 정복의 원리를 파이썬에서 어떻게 모듈화하고, 테스트하는지 잘 보여줍니다. 병합 정렬은 시간 복잡도가 O(n log n)으로, 안정적인 정렬 알고리즘입니다. 모듈화를 통해 코드를 더 깔끔하게 유지하고, 재사용성과 테스트 가능성을 높일 수 있습니다.