python二路歸併排序實現法
阿新 • • 發佈:2018-12-23
歸併原理:
第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
第二步:設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
第三步:比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
重複步驟3直到某一指標超出序列尾
將另一序列剩下的所有元素直接複製到合併序列尾
歸併過程:
比較a[i]和a[j]的大小,若a[i]≤a[j],則將第一個有序表中的元素a[i]複製到r[k]中,並令i和k分別加上1;否則將第二個有序表中的元素a[j]複製到r[k]中,並令j和k分別加上1,如此迴圈下去,直到其中一個有序表取完,然後再將另一個有序表中剩餘的元素複製到r中從下標k到下標t的單元。歸併排序的演算法我們通常用遞迴實現,先把待排序區間[s,t]以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸併操作合併成有序的區間[s,t]。
python程式碼:
def MergeSort(lists): if len(lists) <=1: return lists num = len(lists)/2 left = MergeSort(lists[:num]) right = MergeSort(lists[num:]) return Merge(left,right) def Merge(left,right): r,l=0,0 reslut=[] while l<len(left) and r<len(right): if left[l] < right[r]: reslut.append(left[l]) l+=1 else: reslut.append(right[r]) r+=1 reslut+= right[r:] reslut+= left[l:] return reslut if __name__ == '__main__': arr = [4,2,15,4,6,7,1] print MergeSort(arr)