• Python实现有序数组合并


    有两个从小到大有序排列的数组,如下

    arr1 = [1, 3, 4, 6, 10]

    arr2 = [2, 5, 8, 11]

    将其合并成一个新的从小到大排列的数组

    分析:

    • 先考虑一个数和一个有序数组合并的情况
    • 考虑两个有序数组合并的情况

    一个数和一个有序数组合并

    可以先分析一个数和一个有序数组合并的情况,即将这个数和有序数组中的数依次比较(是否小于数组中的数),当条件成立时,在数组中插入这个数,跳出循环。

    ——注意:考虑数大于数组中的所有数的情况,此时,需要把数插入到数组的最后

    程序如下:

    arr1 = [1, 3, 4, 6, 10]
    arr2 = 13
    arr3 = arr1.copy()			# 复制数组1
    i = 0
    while i < len(arr1):
        if arr2 < arr1[i]:
            arr3.insert(i, arr2)
            break
        else:
            i += 1
    else:
        arr3.insert(i, arr2)
    print(arr3)
    

    两个有序数组合并

    将数组2中的每个数拿出来,即可等价为上述一个数与有序数组合并。

    程序如下

    arr1 = [1, 3, 4, 6, 10]
    arr2 = [2, 5, 8, 11, 15]
    
    arr3 = arr1.copy()         # 复制数组1
    i = 0
    for j in range(len(arr2)):
        while i < len(arr1):        # 用数组1而不要用新的数组3作为判断条件
            if arr2[j] < arr1[i]:
                arr3.insert(i+j, arr2[j])   # 插入数据
                break                       # 插入数据后选择下一个数据
            else:
                i += 1
        else:
            arr3 = arr3 + arr2[j:]          #若数大于数组1中的最后一个,直接拼接
            break
    print(arr3)
    
    

    ——注意:while循环和if语句的条件用数组1做判断,不要用数组3,数组1是固定的,数组3会因为插入数据而变化,一开始我用数组3作条件,总是会超出数组的索引范围,没做出来。

    如果直接使用 arr1 存储答案,在向数组中添加元素的过程中,列表内部的元素会变化,也就是说,我们丢失了 arr1 的原来的值。用 i调用原来列表中的元素与 arr2 中的元素进行比较,而向 arr3 中插入 arr2 的数,就可以有效避免这个问题。

    在操作中尽量避免对原始数据的直接修改。

  • 相关阅读:
    Day 43
    Day 42
    Day 41
    Day 40
    Linux下查看服务器的产品型号和序列号
    AgileController Portal认证成功后弹出找不到指定位置的资源
    华三交换机snmp开通
    FusionCompute 6.3.0 CNA系统安装
    集群IMC策略
    静态路由配置语法
  • 原文地址:https://www.cnblogs.com/augustine0654/p/14810708.html
Copyright © 2020-2023  润新知