Python基础算法之归并排序
该算法采用经典的分治策略,将问题分解成一些小问题然后递归分解,而治的阶段将各个阶段修补在一起
时间复杂度:O(N*logN) 空间复杂度:O(N)
#先拆分,之后再和回去
def Merge(arr): #先分为两部分
n = len(arr)
if n <= 1:
return arr
middle = int(n/2) #中间分一半
left_arr = Merge(arr[:middle]) #左边那一部分
right_arr = Merge(arr[middle:]) #右边那一部分
return MergeSort(left_arr, right_arr)
def MergeSort(left, right): #left和right是左右数组
arr_new = []
i = j = 0 #用i,j分别代表指针指向左右数组
n = len(left)
while i<len(left) and j<len(right):
if left[i]<right[j]:
arr_new.append(left[i])
i+=1 #指针谁小谁移动
else:
arr_new.append(right[j])
j+=1
if i==len(left):
for x in right[j:]:
arr_new.append(x)
else:
for x in left[i:]:
arr_new.append(x)
return arr_new
print(Merge([1, 36, 7, 102, 54, 98]))