文章目录
- 归并排序
- NB三人组总结
归并排序
python">"""
归并排序
""""""
时间复杂度 : O(N*logN)
空间复杂度 : O(N) 需要额外生成一个临时变量,最大是N长
思路:假设有列表被分成两段,这两个段都是以同样的方式排好序的,那么只需要将这两段进行归并排序一次,列表就被排好序了。
由此思想,逐层递归。
"""def merge(li, low, mid, high):i = lowj = mid + 1ltmp = []while i <= mid and j <= high: # 只要左右两边都有数if li[i] < li[j]:ltmp.append(li[i])i += 1else:ltmp.append(li[j])j += 1# while执行完,肯定有一部分没数了while i <= mid:ltmp.append(li[i])i += 1while j <= high:ltmp.append(li[j])j += 1li[low:high + 1] = ltmp# li = [2,4,5,7,1,3,6,8]
# merge(li, 0, 3, 7)
# print(li)def merge_sort(li, low, high):if low < high: # 至少有两个元素,递归mid = (low + high) // 2merge_sort(li, low, mid)merge_sort(li, mid + 1, high)merge(li, low, mid, high)li = list(range(1000))
import randomrandom.shuffle(li)
print(li)
merge_sort(li, 0, len(li) - 1)
print(li)
NB三人组总结
> 若有错误与不足请指出,关注DPT一起进步吧!!!