zoukankan      html  css  js  c++  java
  • 排序算法之归并排序的python实现

    采用分治法:

    分割:递归地把当前序列平均分割成两半。

    集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。

    归并操作(归并算法),指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。

    递归法(Top-down)

    1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

    2.设定两个指针,最初位置分别为两个已经排序序列的起始位置

    3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

    4.重复步骤3直到某一指针到达序列尾

    5.将另一序列剩下的所有元素直接复制到合并序列尾

    迭代法(Bottom-up)

    原理如下(假设序列共有 n个元素):

    1.将序列每相邻两个数字进行归并操作,形成 c e i l ( n / 2 ) 个序列,排序后每个序列包含两/一个元素

    2.若此时序列数不是1个则将上述序列再次归并,形成 c e i l ( n / 4 )个序列,每个序列包含四/三个元素

    3.重复步骤2,直到所有元素排序完毕,即序列数为1

    下面为快速排序的代码实现:

    def merge_sort(lst):
        if len(lst) <= 1:
            # 当列表元素只有一个的时候,直接返回
            return lst
        mid = len(lst) // 2
        left = lst[:mid]
        right = lst[mid:]
    
        left = merge_sort(left)
        right = merge_sort(right)
        # 递归的进行排序
        result = []
        while left and right:
            if left[0] <= right[0]:
                result.append(left.pop(0))
            else:
                result.append(right.pop(0))
        if left:
            result += left
        if right:
            result += right
        return result
        # 返回排序后的结果
    
    
    if __name__ == "__main__":
        li = [9, 4, 2, 3.6, -1, 0, 25, -34, 8, 9, 1, 0]
        print("排序前的队列:",li)
        print("排序后的队列:", merge_sort(li))
  • 相关阅读:
    前端基础之HTML(第一天)
    前端基础之CSS(第二天)
    03bootstrap_表格
    02bootstrap_通用标签样式和代码
    01bootstrap_基本结构和布局
    python学习之路08——元组、集合
    python学习之路07
    python学习之路06——字符串
    python学习之路05
    python学习之路04——列表和字典
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/12153476.html
Copyright © 2011-2022 走看看