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;
               }
  • 相关阅读:
    bzoj1914
    bzoj3144
    bzoj2756
    poj3177
    一些比较水的题目
    bzoj2282
    屯题50AC纪念
    Base64解码中文部分中文乱码的原因
    随机生成36位字符串
    jQuery判断某个元素是否存在某个样式
  • 原文地址:https://www.cnblogs.com/clarke157/p/6910425.html
Copyright © 2011-2022 走看看