def merge_sort(lt):
"""
并归排序
:param lt:
:return:
"""
if len(lt) == 1: # 如果只有一个元素直接返回
return lt
middle_index = len(lt)/2 # 中间值
left_lt = lt[:middle_index] # 切分后的左边列表
right_lt = lt[middle_index:] # 切分后的右边列表
end_left = merge_sort(left_lt) # 递归处理列表
end_right = merge_sort(right_lt)
li = []
i = 0
j = 0
while True:
if i == len(end_left): # 左侧列表循环完,把剩余右侧列表准假到li
li.extend(end_right[j:])
break
if j == len(end_right):
li.extend(end_left[i:]) # 右侧列表循环完,把剩余左侧列表准假到li
break
if end_left[i] < end_right[j]:
li.append(end_left[i])
i += 1 # 因为左右列表内有序, 所以如果当前列表位置小于另一个里列表j索引位置,那么只要判断下一个 i++ 位置和j的大小
else:
li.append(end_right[j])
j += 1
return li
if __name__ == '__main__':
l = merge_sort([31, 41, 59, 26, 41, 58, 2])
print(l)