歸併排序—Python實現
阿新 • • 發佈:2018-12-31
歸併排序
歸併排序是遞迴演算法,思路是將資料表持續分裂為兩半,對兩半分別進行歸併排序
遞迴的基本結束條件:資料表僅有一項,自然是排好序的
縮小規模:將資料表分裂為相等的兩半,規模減為原來的二分之一
呼叫自身:將兩半分別呼叫自身排序,然後將分別排好序的兩半進行歸併,得到排好序的資料表
程式碼
def mergeSort(alist): if len(alist)>1: mid=len(alist)//2 lefthalf=alist[:mid] righthalf=alist[mid:] mergeSort(lefthalf) mergeSort(righthalf) i=j=k=0 while i <len(lefthalf) and j<len(righthalf): if lefthalf[i]<righthalf[j]: alist[k]=lefthalf[i] i+=1 else: alist[k]=righthalf[j] j+=1 k=k+1 while i<len(lefthalf): alist[k]=lefthalf[i] i+=1 k+=1 while j<len(righthalf): alist[k]=righthalf[j] j+=1 k+=1 alist=[52,312,54,7,3,2,56,34,65,82,91,65] mergeSort(alist) print(alist)
最簡便寫法(體現了Python的強大)
def mergeSort(alist): if len(alist)<=1: return alist middle=int(len(alist)/2) left=mergeSort(alist[:middle]) right=mergeSort(alist[middle:]) merged=[] while left and right: merged.append(left.pop(0) if left[0]<right[0] else right.pop(0)) merged.extend(right if right else left) return merged alist=[52,312,54,7,3,2,56,34,65,82,91,65] b=mergeSort(alist) print(b)