diff --git a/sorting/merge_sort.py b/sorting/merge_sort.py new file mode 100644 index 0000000..9f8b227 --- /dev/null +++ b/sorting/merge_sort.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + + +def merge_sort(array): + + # part 1: recursively divide the array into subarrays + if len(array) < 2: + return array + + mid = len(array) // 2 + left = merge_sort(array[:mid]) + right = merge_sort(array[mid:]) + + # part 2: merge the subarrays + result = [] + i, j = 0, 0 + + while i < len(left) and j < len(right): + if left[i] <= right[j]: + result.append(left[i]) + i +=1 + else: + result.append(right[j]) + j +=1 + + if left[i:]: + result.extend(left[i:]) + if right[j:]: + result.extend(right[j:]) + + return result +