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 }

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

  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/A_ming/p/1712313.html
Copyright © 2011-2022 走看看