合并两个有序数组为一个有序的大数组(时间复杂度最低)

【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]

猜你喜欢

转载自blog.csdn.net/Allan_shore_ma/article/details/79869841
今日推荐