【Python】合并两个有序数组为一个有序的大数组(时间复杂度最低)
思路
思路一:
先把两个数组放到一个新的数组中,再排序。
但是这样的没体现任何算法,这里考的不是快速排序等排序算法。关键应该是如何利用有序这个已知条件。
思路二:
按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环
假设两个源数组的长度不一样,那么假设其中短的数组用完了,即全部放入到新数组中去了,那么长数组中剩下的那一段就可以直接拿来放入到新数组中去了。
代码
# encoding=utf-8
def merge_sorted_lists(aList, bList):
result = []
length_of_aList = len(aList)
length_of_bList = len(bList)
i = 0
j = 0
while i < length_of_aList and j < length_of_bList:
if aList[i] <= bList[j]:
result.append(aList[i])
i += 1
else:
result.append(bList[j])
j += 1
if i < length_of_aList:
result.extend(aList[i:])
if j < length_of_bList:
result.extend(bList[j:])
return result
a = [1, 3, 6, 10]
b = [0, 4, 5, 7, 10, 11, 14, 100]
print merge_sorted_lists(a, b)
结果
[0, 1, 3, 4, 5, 6, 7, 10, 10, 11, 14, 100]