zoukankan      html  css  js  c++  java
  • 算法

    算法 - 合并两个有序数组成一个有序数组

     

    最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。

    题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。

    有两种实现思路:

    1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。

    2. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。

    第一种方式应该是大多数人想到的,也比较容易实现,下面主要来实现第二种方式。

    代码如下:

    复制代码

    public static int[] MergeList(int a[],int b[])
    {
    int result[];
    // 定义一个新数组,长度为两个数组长度之和
    result = new int[a.length+b.length];
    //i:a数组下标 j:b数组下标 k:新数组下标
    int i=0,j=0,k=0;
    // 按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环
    while(i<a.length && j<b.length)
    if(a[i] <= b[j]) {
    result[k++] = a[i++];
    print(result);
    System.out.println();
    }else{
    result[k++] = b[j++];
    }
    /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 *
    * 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/
    while(i < a.length)
    result[k++] = a[i++];
    while(j < b.length)
    result[k++] = b[j++];
    return result;
    }

    
    
    复制代码
  • 相关阅读:
    RBAC权限管理模型 产品经理 设计
    Redisson 分布式锁
    Jenkins下载历史Build版本的归档文件
    Java JPA @Transient 在Hibernate中应用
    Solving the Top ERP and CRM Metadata Challenges with erwin & Silwood
    MySQL 字符串 分割 多列
    MySQL CONCAT opposite
    Web并发页面访问量统计实现
    UNIX网络编程读书笔记:基本UDP套接口编程
    UNIX网络编程调试工具:tcpdump、netstat和lsof
  • 原文地址:https://www.cnblogs.com/williamjie/p/9958285.html
Copyright © 2011-2022 走看看