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

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

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

    代码:

     1 class ArraySort
     2 {
     3     //两个有序数组的合并函数
     4     public static int[] MergeList(int a[],int b[])
     5     {
     6         int result[];  
     7         if(checkSort(a) && checkSort(b))  //检查传入的数组是否是有序的
     8         {
     9             result = new int[a.length+b.length];
    10             
    11             int i=0,j=0,k=0;   //i:用于标示a数组    j:用来标示b数组  k:用来标示传入的数组
    12 
    13             while(i<a.length && j<b.length)
    14                 if(a[i] <= b[j]) {
    15                     result[k++= a[i++];
    16                 }else{
    17                     result[k++= b[j++];
    18                 }
    19 
    20             /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */
    21             while(i < a.length) 
    22                 result[k++= a[i++];
    23             while(j < b.length)
    24                 result[k++= b[j++];
    25             
    26             return result;
    27         }
    28         else 
    29         {
    30             System.out.print("非有序数组,不可排序!");
    31             return null;
    32         }
    33     }
    34     
    35     //检查数组是否是顺序存储的
    36     public static boolean checkSort(int a[])
    37     {
    38         boolean change = true;  //这个标志位是一种优化程序的方法,可以看看我写的冒泡排序优化就会明白了
    39         for(int i=0; i<a.length-1 && change; i++)
    40         {
    41             for(int j=i+1; j<a.length; j++)
    42                 if(a[j-1> a[j])
    43                     return false;
    44                 else change = false;
    45         }
    46         return true;        
    47     }
    48     
    49     // 打印函数
    50     public static void print(int b[])
    51     {
    52          for(int i=0; i<b.length ; i++)
    53          {
    54              System.out.print(b[i] + (i%10 ==9 ? "\n":"\t"));
    55          }
    56     }
    57     
    58     public static void main(String args[])
    59     {
    60         int a[]={1,2,2,3,5,6,7,7};
    61         int b[]={1,2,4,5,8,8,9,10,11,12,12,13,14};
    62         int c[]= MergeList(a,b);
    63         if(c!=null)
    64         print(c);
    65         else
    66             System.out.println("");
    67     }
    68 }

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

  • 相关阅读:
    c# 服务端
    c# 客户端
    PHP中cookie和Session
    c# socket
    js正则匹配html内容
    js获取url传递参数
    Blob API及问题记录
    js创建下载文件
    ie6下margin双倍距的问题
    使用RouteDebugger对MVC路由进行调试
  • 原文地址:https://www.cnblogs.com/A_ming/p/1712313.html
Copyright © 2011-2022 走看看