归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用
def _merge(a: list, b: list) -> list:
"""Merge two sorted list"""
c = []
while len(a) > 0 and len(b) > 0:
if a[0] < b[0]:
c.append(a[0])
a.remove(a[0])
else:
c.append(b[0])
b.remove(b[0])
if len(a) == 0:
c += b
else:
c += a
return c
def _merge_sorted(nums: list) -> list:
# Won't sort in place 进行分割,分成两对单个元素数组
if len(nums) <= 1:
return nums
m = len(nums) // 2
a = _merge_sorted(nums[:m])
b = _merge_sorted(nums[m:])
return _merge(a, b)
# Wrapper
def merge_sorted(nums: list, reverse=False) -> list:
import time
start = time.time()
"""Merge Sort"""
nums = _merge_sorted(nums)
if reverse:
nums = nums[::-1]
t = time.time() - start
return nums, len(nums), t
l = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
l = merge_sorted(l, reverse=True)[0]
print(l)