標籤:邏輯 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)
歸併排序演算法