zoukankan      html  css  js  c++  java
  • 归并排序

    归并排序的思想是先递归分解数组,再合并数组,将数组分解最小之后,然后合并两个有序数组,基本思想就是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可

    # -*- coding: utf-8 -*-
    """
    归并排序:
    merge_sort  54 26 93 17 77 31 44 55 56
    ..............................................................
    拆:
               54 26 93 17           77 31 44 55 56
            54 26      93 17      77 31    44 55 56
        54  26      93  17      77  31    44  55 56
    ...............................................................
    合:
        26 54      17 93        31 77     44 55 56
        R           L           R          L
        17 26 54 93         31 44 55 56 77
        R                   L
        17 26 31 44 54 55 56 77 93
    ...............................................................
    """
    def merge_sort(alist):
        n=len(alist)
        if n<=1:
            return alist
        mid=n//2
        # left 采用归并排序后形成的有序的新得列表
        left_li=merge_sort(alist[:mid])
    
        right_li=merge_sort(alist[mid:])
    
        # 将两个有序的子序列合并为一个新得整体
        # merge(left,right)
    
        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(left_li[left_pointer])
                left_pointer +=1
            else:
                result.append(right_li[right_pointer])
                right_pointer +=1
        result +=left_li[left_pointer:]
        result +=right_li[right_pointer:]
        return result
    if __name__ == '__main__':
        li =[54,26,93,17,77,31,44,55,20]
        print(li)
        sorted_li=merge_sort(li)
        print(li)
        print(sorted_li)
  • 相关阅读:
    js递归优化
    音视频混流
    JS的发布订阅模式
    redhat7.4 docker run启动容器报错container_linux.go:449
    使用Docker部署vue的前端应用过程
    Mac下安装pip
    powerDesigner 把name项添加到注释
    SQL SERVER 2012 连接报错
    CentOS minimal 安装图形界面
    SQLServer2008卸载后重装问题
  • 原文地址:https://www.cnblogs.com/bashliuhe/p/14952781.html
Copyright © 2011-2022 走看看