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

    因为要备课,写了一下归并排序。当然还可以优化。

    # coding: utf-8
    
    # In[79]:
    
    
    import math
    def split_list(main_list,list_len=2):
        '''
        分割列表
        按照list_len分割成列表,返回一个多维列表
        '''
        start_num = 0
        max_step = math.ceil(len(main_list)/list_len) #需要循环的次数
        new_list = []
        for i in range(max_step):
            new_list.append(main_list[start_num:start_num+list_len]) #变成新列表
            start_num += list_len
        return new_list
    
    
    # In[80]:
    
    
    def retun_num(a,b,max_sort=True):
        '''
        按大小返回a和b
        '''
        if max_sort:
            if a > b:
                return [a,b]
            else:
                return [b,a]
        else:
            if a > b:
                return [b,a]
            else:
                return [a,b]
    
    
    # In[86]:
    
    
    def merge_list(list_a,list_b,max_sort=True):
        '''
        合并列表
        '''
        new_list = []
        if max_sort:
            while True:
                if list_a[0]>list_b[0]:
                    new_list.append(list_a[0]) #把大的扔新列表里,然后扔掉这个元素
                    list_a.pop(0)
                    if len(list_a)>0:          #没扔没就继续,扔没了就把另一个合并进来,因为另一个已经排序完了
                        continue
                    else:
                        return new_list+list_b 
                else:
                    new_list.append(list_b[0]) 
                    list_b.pop(0)
                    if len(list_b)>0:
                        continue
                    else:
                        return new_list+list_a
        else:
            while True:
                if list_a[0] < list_b[0]:      #把小的扔进新列表,然后扔掉这个元素,同上
                    new_list.append(list_a[0])
                    list_a.pop(0)
                    if len(list_a)>0:
                        continue
                    else:
                        return new_list+list_b
                else:
                    new_list.append(list_b[0])
                    list_b.pop(0)
                    if len(list_b)>0:
                        continue
                    else:
                        return new_list+list_a
    
    
    # In[89]:
    
    
    def sort_algorithms(main_list,max_sort=True):
        '''
        逻辑函数
        '''
        split_main_list = split_list(main_list) #切分成2个的元素
        done_list = []
        for small_list in split_main_list:  #第一次排序
            if len(small_list) > 1:
                done_list.append(retun_num(small_list[0],small_list[1],max_sort=max_sort))
            else:
                done_list.append(small_list)
        max_list = done_list[0]  #初始化边界
        for i in range(1,len(done_list)): #递归一波
            max_list = merge_list(max_list,done_list[i],max_sort=max_sort)
        return max_list
    
    
    # In[91]:
    
    
    main_list = [11,21,3,12,6,22,18,100,500,66,28]
    sort_algorithms(main_list,max_sort=False)
  • 相关阅读:
    Splay
    AVL
    Everything 搜索文件
    佛祖保佑 永无Bug
    火绒注入
    STL vector list map 用法
    漏洞挖掘 向目标进程中植入代码
    漏洞挖掘 利用漏洞控制程序执行流程
    漏洞挖掘 堆栈的溢出实践
    追码CM破解笔记
  • 原文地址:https://www.cnblogs.com/redheat/p/9404732.html
Copyright © 2011-2022 走看看