码迷,mamicode.com
首页 > 其他好文 > 详细

merge 实现

时间:2015-05-14 23:39:09      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

  今天写了个小程序,做两个已经从小到大排序好的数据的merge。

要求: listA = (1, 3, 5, 10); listB = (4, 6, 12);listA 和listB都是排序由小到大的列表,元素个数不限。

写代码将listA 按照由小到大的顺序合并,不去重。

第一轮代码如下:

def merge(A, B):
    if len(A)==0:
        return B
    if len(B)==0:
        return A

    result = []
    for itemA in A:
        for itemB in B:
            if itemA < itemB:
                print itemA, "<", itemB,  --------->insert itemA:, itemA
                result.append(itemA)
        
            else:
                print itemA, ">", itemB, --------->insert itemB:, itemB
                result.append(itemB)        
                
    return result


Alist = [1, 2, 3, 7, 8]
Blist = [4, 6]

print merge(Alist, Blist)
                

可想而知,得到的结果自然是不正确的。 

技术分享

 

问题呢? 很显然,break 跳出了循环后,再进入的时候,还会从B的开始查起,这样有的元素就会多次被查到,而在insertB的时候,也会丢掉A的循环。最终的数据结果是,A的元素丢失,B的元素多次被插入。

那如何争取解决问题呢?

下面这个代码写的很繁复,但是实现了基本功能。

def merge(A, B):
    if len(A)==0:
        return B
    if len(B)==0:
        return A

    result = []
    lenA = len(A)
    lenB = len(B)
    currentAIndex = 0
    currentBIndex = 0
   
    for i in range(currentAIndex, lenA):
        for j in range(currentBIndex, lenB):
            if A[i] < B[j]:
                print A[i], "<", B[j],  --------->insert itemA:, A[i]
                result.append(A[i])
                currentAIndex = currentAIndex+ 1
                break
            else:
                print A[i], ">", B[j], --------->insert itemB:, B[j]
                result.append(B[j])
                currentBIndex = currentBIndex+ 1

    while currentAIndex <lenA:
        result.append(A[currentAIndex])
        currentAIndex = currentAIndex+ 1

    while currentBIndex <lenB:
        result.append(B[currentBIndex])
        currentBIndex = currentBIndex+ 1

                
    return result


Alist = [1, 7, 8]
Blist = [4, 6, 9, 10]
print merge(Alist, Blist)

 

merge 实现

标签:

原文地址:http://www.cnblogs.com/xiami303/p/4504699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!