歸併排序演算法

來源:互聯網
上載者:User

標籤:邏輯   else   style   合并   mat   pop   port   imp   lis   

因為要備課,寫了一下歸併排序。當然還可以最佳化。

# coding: utf-8# In[79]:import mathdef 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)

 

歸併排序演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.