时间:2021-05-22
第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好)
第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好)
第二种思路的排序算法与测试代码如下:
def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <= b[0]: ret.append(a[0]) a.remove(a[0]) if a[0] >= b[0]: ret.append(b[0]) b.remove(b[0]) if len(a) == 0: ret += b if len(b) == 0: ret += a return retif __name__ == '__main__': a = [1,3,4,6,7,78,97,190] b = [2,5,6,8,10,12,14,16,18] print(merge_sort(a, b))反思了一下上面的过程,不应该用remove方法,因为仔细想一下remove方法可能比较耗时,不算最简单。
改进一下,改用索引元素比较法替代头位元素比较法:
def merge_sort(a, b): ret = [] i = j = 0 while len(a) >= i + 1 and len(b) >= j + 1: if a[i] <= b[j]: ret.append(a[i]) i += 1 else: ret.append(b[j]) j += 1 if len(a) > i: ret += a[i:] if len(b) > j: ret += b[j:] return retif __name__ == '__main__': a = [1,3,4,6,7,78,97,190] b = [2,5,6,8,10,12,14,16,18] print(merge_sort(a, b))这个基本就是最简单的方法了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
合并有序数组的实现java版本:实例代码publicclassMerge{//合并有序数组publicstaticvoidmergeSort(inta[],in
本文实例讲述了Python实现的合并两个有序数组算法。分享给大家供大家参考,具体如下:思路按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对
归并算法之有序数组合并算法实现一个简单的有序数组合并算法:写一个函数,传入2个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和
本文实例讲述了PHP实现合并两个有序数组的方法。分享给大家供大家参考,具体如下:$arr1=array(1,2,3,4,5,6,7,8);$arr2=array
本文实例讲述了python实现合并两个数组的方法。分享给大家供大家参考。具体如下:python合并两个数组,将两个数组连接成一个数组,例如,数组a=[1,2,3