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

思路
按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环 
假设两个源数组的长度不一样,那么假设其中短的数组用完了,即全部放入到新数组中去了,那么长数组中剩下的那一段就可以直接拿来放入到新数组中去了。

#coding=utf-8

#合并数据
test1 = [1,2,5,7,9]
test2=[2,4,6,8,10,11,34,55]

def mergetest(test1,test2):
	result =[]
	len1=len(test1)
	len2=len(test2)
	i=0
	j=0
	while i<len1 and j<len2:
		if test1[i]<=test2[j]:
			result.append(test1[i])
			i+=1
		else:
			result.append(test2[j])
			j+=1
	if i<len1:
		for z in range(i+1,len1):
			result.append(test1[z])
	elif j<len2:
		for z in range(j+1,len2):
			result.append(test2[z])
	return result

print mergetest(test1,test2)

add:链表情况下合并

def merge_link(link1,link2):
        head = single_link(0)
        first = head
        while link1!=None and link2!=None:
                if l1.val<=l2.val:
                        head.next =l1
                        l1=l1.next
                else:
                        head.next=l2
                        l2=l2.next
                head=head.next
        if l1!=None:
                head.next=l1
        elif l2!=None:
                head.next=lw
        return first.next

展开阅读全文

没有更多推荐了,返回首页