归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)大O符号。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。
采用分治法:
归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。
原理如下(假设序列共有n个元素):
def mergeSort(nums):
if len(nums) < 2:
return nums
mid = len(nums) // 2
left = mergeSort(nums[:mid])
right = mergeSort(nums[mid:])
result = []
while left and right:
if left[0] <= right[0]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
if left:
result += left
if right:
result += right
return result
if __name__ == "__main__":
nums = [1, 4, 2, 3.6, -1, 0, 25, -34, 8, 9, 1, 0]
print("original:", nums)
print("Sorted:", mergeSort(nums))
>>>
original: [1, 4, 2, 3.6, -1, 0, 25, -34, 8, 9, 1, 0]
Sorted: [-34, -1, 0, 0, 1, 1, 2, 3.6, 4, 8, 9, 25]
参考:https://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5
原文:https://www.cnblogs.com/remixnameless/p/13258541.html