From 21b5dfc3e66f797d57119f7add2a82d15d0c19da Mon Sep 17 00:00:00 2001 From: Adam Djellouli <37275728+djeada@users.noreply.github.com> Date: Thu, 9 Jan 2025 22:50:43 +0100 Subject: [PATCH] Implemented recursive merge sort algorithm with O(n log n) time complexity. --- coding/python/merge_sort.py | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 coding/python/merge_sort.py diff --git a/coding/python/merge_sort.py b/coding/python/merge_sort.py new file mode 100644 index 000000000..a92ca6bc9 --- /dev/null +++ b/coding/python/merge_sort.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import random +from typing import List + + +def merge_sort(arr: List[int]) -> List[int]: + 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: List[int], right: List[int]) -> List[int]: + merged = [] + i = j = 0 + while i < len(left) and j < len(right): + if left[i] <= right[j]: + merged.append(left[i]) + i += 1 + else: + merged.append(right[j]) + j += 1 + merged.extend(left[i:]) + merged.extend(right[j:]) + return merged + + +def generate_random_list(size: int = 10, lower: int = 1, upper: int = 100) -> List[int]: + return [random.randint(lower, upper) for _ in range(size)] + + +def main(): + """ + Executes the merge sort algorithm with a randomly generated list. + Time Complexity: O(n log n) + """ + rand_num_li = generate_random_list() + print(f"Unsorted List: {rand_num_li}") + sorted_list = merge_sort(rand_num_li) + print(f"Sorted List: {sorted_list}") + + +if __name__ == '__main__': + main()