zoukankan      html  css  js  c++  java
  • 两个有序数组合并为一个有序数组

    突然想到了这个算法,记得以前看过,但是没写,怕自己会写不出这个算法,于是就把它用JAVA写出来,呵呵。

    思想:先依次比较两个数组,按照小的就传入新的数组。当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可。

    代码:

    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 class ArraySort
    {
    //两个有序数组的合并函数
    public static int[] MergeList(int a[],int b[])
    {
    int result[];
    if(checkSort(a) && checkSort(b)) //检查传入的数组是否是有序的
    {
    result = new int[a.length+b.length];

    int i=0,j=0,k=0; //i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组

    while(i<a.length && j<b.length)
    if(a[i] <= b[j]) {
    result[k++] = a[i++];
    }else{
    result[k++] = b[j++];
    }

    /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */
    while(i < a.length)
    result[k++] = a[i++];
    while(j < b.length)
    result[k++] = b[j++];

    return result;
    }
    else
    {
    System.out.print("非有序数组,不可排序!");
    return null;
    }
    }

    //检查数组是否是顺序存储的
    public static boolean checkSort(int a[])
    {
    boolean change = true; //这个标志位是一种优化程序的方法,可以看看我写的冒泡排序优化就会明白了
    for(int i=0; i<a.length-1 && change; i++)
    {
    for(int j=i+1; j<a.length; j++)
    if(a[j-1] > a[j])
    return false;
    else change = false;
    }
    return true;
    }

    // 打印函数
    public static void print(int b[])
    {
    for(int i=0; i<b.length ; i++)
    {
    System.out.print(b[i] + (i%10 ==9 ? " ":" "));
    }
    }

    public static void main(String args[])
    {
    int a[]={1,2,2,3,5,6,7,7};
    int b[]={1,2,4,5,8,8,9,10,11,12,12,13,14};
    int c[]= MergeList(a,b);
    if(c!=null)
    print(c);
    else
    System.out.println("");
    }
    }

    总结:这个算法应该算是经典的了,一定要记住,这一部分应该是数据结构中的链表中的内容。

  • 相关阅读:
    用于主题检测的临时日志(594fb726-af0b-400d-b647-8b1d1b477d72
    返璞归真vc++之字符类型
    DIV居中
    程序员职业生涯
    枚举进程句柄
    不使用mutex设计模式解决并发访问cache
    服务器权重分配算法
    xmemecached中的一致性hash算法
    安卓课堂练习
    pythonPTA---分支循环与集合7-1 jmu-python-韩信点兵 (20分) 7-2 打印数字矩形 (10分) 7-3 成绩统计 (10分) 7-4 找列表中最大元素的下标 7-5 删除列表中的重复值
  • 原文地址:https://www.cnblogs.com/wnlja/p/4344947.html
Copyright © 2011-2022 走看看