我已经包含了我正在使用的代码.
我知道代码的开头继续拆分子列表,直到你有单个值.单个值保存在变量lefthalf和righthalf中,然后按排序顺序合并.
代码如何合并两个元素的两个列表?我认为这些子列表保存在名为alist的单独局部变量中,这些变量如何合并?
def mergeSort(alist):
if len(alist)>1:
mid = len(alist)//2
lefthalf = alist[:mid]
righthalf = alist[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i=0
j=0
k=0
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i]
i=i+1
else:
alist[k]=righthalf[j]
j=j+1
k=k+1
while i < len(lefthalf):
alist[k]=lefthalf[i]
i=i+1
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
j=j+1
k=k+1
解决方法:
第一个while循环从lefthalf,righthalf中选择一个较小的较小项目,直到两个列表中的一个用完. (lefthalf,righthalf每个都包含已排序的项目)
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
# Pick the smallest item from `leftHalf` if has a smaller item
alist[k]=lefthalf[i]
i=i+1
else:
# Pick smallest item from `rightHalf`
alist[k]=righthalf[j]
j=j+1
k = k + 1
# `k` keeps track position of `alist`
# (where to put the smallest item)
# Need to increase the `k` for the next item
第二个,第三个while循环将剩余项目复制到alist.只执行两个循环体中的一个;一个在第一个while循环中是exausted.
侧面注意:alist [k] = …更改alist项目.
标签:python,algorithm,sorting
来源: https://codeday.me/bug/20190527/1166381.html