- 归并排序(Merge Sort)是一种分治算法。它的基本思想是将待排序的序列分成两部分,然后对这两部分分别进行排序,最后将排好序的两部分合并成一个完整的有序序列。
- 具体实现过程如下:
- 将待排序的序列分成两部分,递归地对这两部分进行排序。如果序列的长度小于等于1,则无需排序,直接返回序列本身。
- 将排好序的两部分合并成一个完整的有序序列。具体实现方式是创建一个空数组作为结果数组,然后依次比较两个有序序列的元素,将较小的元素加入结果数组中,直到其中一个序列的元素全部加入结果数组中。最后将剩余的元素加入结果数组中即可。
def merge_sort(arr):
if len(arr) <= 1:
return arr
else:
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
left = merge_sort(left)
right = merge_sort(right)
return merge(left, right)
def merge(left, right):
result = []
i = j = 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
result += left[i:]
result += right[j:]
return result
def test_merge_sort():
arr = [12, 11, 34, 45, 67, 90, 10, 20, 35, 67, 78]
print(merge_sort(arr))
if __name__ == "__main__":
test_merge_sort()
[10, 11, 12, 20, 34, 35, 45, 67, 67, 78, 90]
微信Alt+A截屏工具