归并排序
- 思想:将两个有序列表合并得到一个新的有序列表。通过递归,将待排序列表不断折半划分直至只剩一个元素。然后不断进行归并操作完成排序。
- 如[3, 2, 1, 4, 5] --> [3, 2, 1], [4, 5] --> [3, 2],[1], [4],[5] --> [3],[2],[1],[4],[5]
- 归并:[2, 3], [1], [4, 5] --> [1, 2, 3], [4, 5] --> [1, 2, 3, 4, 5]
- 时间复杂度:O(nlog(n))
pthon实现
def merge(li, low, mid, high):
i = low
j = mid + 1
temp = []
while i <= mid and j <= high:
if li[i] < li[j]:
temp.append(li[i])
i += 1
else:
temp.append(li[j])
j += 1
while i <= mid:
temp.append(li[i])
i += 1
while j <= high:
temp.append(li[j])
j += 1
li[low:high+1] = temp
def merge_sort(li, low, high):
if low < high:
mid = (low + high) // 2
merge_sort(li, low, mid)
merge_sort(li, mid+1, high)
merge(li, low, mid, high)
li = list(range(20))
random.shuffle(li)
print(li)
merge_sort(li, 0, len(li)-1)
print(li )