记录一下自己折腾归并排序,其实再稍加修改,可以用来解决合并两个有序数组问题,思路就是双指针法
#coding:utf-8
def merge(a, left, mid, right):
i = left
j = mid + 1
b = []
while i <= mid and j <= right:
if a[i] <= a[j]:
b.append(a[i])
i += 1
else:
b.append(a[j])
j += 1
while i <= mid:
b.append(a[i])
i += 1
while j <= right:
b.append(a[j])
j += 1
return b
a = [1, 3, 5, 7, 2, 4, 6, 8]
test = merge(a, 0, 3, 7)
print(test) #[1, 2, 3, 4, 5, 6, 7, 8]
归并排序递归实现
def merge(left, right):
l, r = 0, 0
result = []
while l < len(left) and r < len(right):
if left[l] < right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
result += left[l:]
result += right[r:]
return result
def mergeSort(a):
if len(a) <= 1:
return a
mid = len(a) // 2
left = mergeSort(a[:mid])
right = mergeSort(a[mid:])
return merge(left, right)
print(mergeSort([1, 3, 5, 7, 2, 4, 6, 8]))