python实现归并排序

时光怂恿深爱的人放手 提交于 2019-11-29 12:06:52
# 归并排序
def merge_sort(list):
  n = len(list)
  # 先将待排序的数拆开
  if n <= 1:   # 拆分到只有一个元素为止,返回。
    return list
  mid = n // 2
  # print(list[:mid])  
  # print(list[mid:])
  left_li = merge_sort(list[:mid])    # 归并排序后产生的新有序列表
  right_li = merge_sort(list[mid:])
  # print(left_li)
  # print(right_li)
  # 合并left和right,将2个有序的子序列合并为一个新的整体
  left_pointer, right_pointer = 0, 0
  # 存放合并后的结果值
  result = []
  while (left_pointer < len(left_li) and right_pointer <len(right_li) ):
     if left_li[left_pointer] > right_li[right_pointer]:
        result.append(right_li[right_pointer])
        right_pointer += 1
     else:
        result.append(left_li[left_pointer])
        left_pointer += 1
  if left_pointer < len(left_li):
    result += left_li[left_pointer:]
  if right_pointer < len(right_li):
    result += right_li[right_pointer:]
      
  return result                         


if __name__ == '__main__':
  list = [6, 7, 0, 34, 15, 2, 17]
  result = merge_sort(list)
  print(result)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!