码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序算法

时间:2018-08-02 02:02:53      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:逻辑   else   style   合并   mat   pop   port   imp   lis   

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

# 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)

 

归并排序算法

标签:逻辑   else   style   合并   mat   pop   port   imp   lis   

原文地址:https://www.cnblogs.com/redheat/p/9404732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!