A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

不是终点

初级黑马

  • 黑马币:17

  • 帖子:6

  • 精华:0

© 不是终点 初级黑马   /  2019-4-1 08:29  /  2094 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

结合黑马Python后期视频的学习,整理了我们常见的排序算法,整理如下:冒泡排序,希尔排序,选择排序,插入排序,归并排序,快速排序.其中不改变相同元素位置的算法称为稳定型排序算法(冒泡排序,插入排序,归并排序),改变相同元素位置的算法,称为不稳定算法,稳定型排序,.该贴就为大家介绍其中的归并算法.
        归并算法,较为难理解的是其中的实现原理,调用自身递归,实现数据链的拆分.具体python代码见下:
def merge_sort(alist):
    """
    归并排序
    :param alist:输入的形参
    :return: 返回排完序的列表
    """
    n = len(alist)
    if n <= 1:
        return
    mid = n // 2
    # 掉用本身进行递归
    left_list = merge_sort(alist[:mid])
    right_list = merge_sort(alist[mid:])
    left_cur, right_cur = 0, 0
    result = []
    while left_cur < len(left_list) and right_cur < len(right_list):
        if left_list[left_cur] < right_list[right_cur]:
            result.append(left_list[left_cur])
            left_cur += 1
        else:
            result.append(right_list[right_cur])
            right_cur += 1

    result += left_list[left_cur]
    result += right_list[right_cur]
return result
递归调用的出口为 n <= 1,取中间值并从索引为0和-1创建两个指针,并将其赋值为0, 用列表切片属性将获取的值分别存放到所对应的列表中,移动指针,最终将所有链路上的数据,重新进行排序

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马