黑马程序员技术交流社区

标题: 排序算法 [打印本页]

作者: 不是终点    时间: 2019-4-1 08:29
标题: 排序算法
结合黑马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, 用列表切片属性将获取的值分别存放到所对应的列表中,移动指针,最终将所有链路上的数据,重新进行排序

作者: 1721121521    时间: 2019-4-1 09:58
加油





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2