今天写了个小程序,做两个已经从小到大排序好的数据的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 实现的更多相关文章

  1. [算法]——归并排序(Merge Sort)

    归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...

  2. SQL 提示介绍 hash/merge/concat union

    查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...

  3. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  4. SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join

    nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...

  5. Git 少用 Pull 多用 Fetch 和 Merge

    本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让它更短些.在Git的邮件列表里有很多关于本文的讨论,我会尽量把其中相关的观点列在下面. 我最常 ...

  6. Merge 的小技巧

    今天跟大家分享一下搬动数据使用Merge的方法. 有些时候,当我们做数据搬动的时候,有时候做测试啊,换对象啊,就会存在有时候外键存在,不知道怎么对应的关系.比如我现在有架构相同的两组table , A ...

  7. [LeetCode] Merge Sorted Array 混合插入有序数组

    Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...

  8. [LeetCode] Merge Intervals 合并区间

    Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...

  9. [LeetCode] Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...

  10. [LeetCode] Merge Two Sorted Lists 混合插入有序链表

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

随机推荐

  1. Spring AOP(注解方式)

    配置文件: xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org ...

  2. CSS扇形展开效果

    知识点预备: [1]CSS3中特别重要的transform中的rotate(),现在transform可以将元素进行2D和3D变形. 2D transform常用的transform-function ...

  3. 1119 网页布局,css写下拉列表

    <style type="text/css"> *{ margin:0px; padding:0px;} #body{ width:1000px; height:200 ...

  4. ajax温习

    工作中一直有写JS,也一直有用jquery,在感受jquery便利之余,也对它产生了依赖,已至于许多功能只知使用而不知原生写法,就像ajax. 今天不小心翻看了以前学习的视频,温故了一下原生ajax写 ...

  5. iOS开发-NSURLSession详解

    Core Foundation中NSURLConnection在2003年伴随着Safari浏览器的发行,诞生的时间比较久远,iOS升级比较快,AFNetWorking在3.0版本删除了所有基于NSU ...

  6. Liferay7 BPM门户开发之35: AssetTag的集成查询

    Tag是liferay中的Asset特性,可以用来对信息进行分类,在iferay中的Asset类型为: 1. Web Content(自定义内容) 2. Documents and Media(文档库 ...

  7. AngularJS的date 过滤器

    date 过滤器可以将日期格式化成需要的格式.AngularJS中内置了几种日期格式,如果没有指定使用任何格式,默认会采用 mediumDate 格式,下面的例子中展示了这个格式. ·下面是内置的支持 ...

  8. seajs加载jquery时提示$ is not a function该怎么解决

    这篇文章主要介绍了seajs加载jquery时提示$ is not a function该怎么解决的相关资料,需要的朋友可以参考下 jquery1.7以上的都支持模块化加载,只是jquery默认的是支 ...

  9. linux进程监控,monitor脚本

    由于服务器上一些进程莫名的挂掉,需要些一个monitor的bash脚本来监控这些进程: #! /bin/bash #chkconfig info ### BEGIN INIT INFO # Provi ...

  10. 解决VS2010中在项目上右键鼠标,无“添加STS引用”菜单的问题

    解决方法:将Windows Identity Foundation SDK文件夹C:\Program Files (x86)\Windows Identity Foundation SDK\v3.5\ ...