博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序之有序数组合并
阅读量:4968 次
发布时间:2019-06-12

本文共 2395 字,大约阅读时间需要 7 分钟。

问题描述:两个有序数组,一个长度为m,一个长度为n,需要将两个数组合并成一个数组

思路:

首先想到了二路归并,难点在于判断两路谁现被耗尽,未被耗尽的一个将会被依次添加数组

 

代码测试:

ps:这是第一次的想法,最真实的水平

import java.util.Scanner;

public class MergeSort {
 
  public static void main(String[] args) {
          
     Scanner p1 = new Scanner(System.in);
     System.out.println("输入第一个数组,数组长度为m=:");
     int m = p1.nextInt();
     int[] a = new int[m];
      for(int i = 0;i < m;++i){
          System.out.println("输入第"+(i+1)+"个数:");
          a[i] = p1.nextInt();
      }
      Scanner p2 = new Scanner(System.in);
      System.out.println("输入第二个数组,数组长度为n=:");
      int n = p2.nextInt();
      int[] b= new int[n];
      for(int j = 0;j < n;++j){
          System.out.println("输入第"+(j+1)+"个数:");
          b[j] = p2.nextInt();
      }
      int[] c = new int[a.length + b.length];
       int t=0;
       int f=0;
      int k=0;
        while(t<a.length&& f<b.length){
             if(a[t]<b[f]){
                    c[k++]=    c[t++];
            }else{
                    c[k++]=b[f++];
                }
                   }
         while(t<m) {
             c[k++]=a[t++];
         }
         while(f<n) {
             c[k++]=b[f++];
         }
        
        for (int x:c) {
                 System.out.print(x+",\t");
                 }
   }
     
}

-----------------------------------------------------------------------------------------

改进后的代码 利用方法,看起来更简洁了

public class MergeApp {

    
    public static void merge(int[] arrayA,int sizeA,int[] arrayB,int sizeB,int[] arrayC){
        int aDex = 0,bDex = 0,cDex = 0;
        while (aDex < sizeA && bDex < sizeB){
            if (arrayA[aDex] < arrayB[bDex]){
                arrayC[cDex++] = arrayA[aDex++];
            }else{
                arrayC[cDex++] = arrayB[bDex++];
            }
        }
        while (aDex < sizeA){
            arrayC[cDex++] = arrayA[aDex++];
        }
        while (bDex < sizeB){
            arrayC[cDex++] = arrayB[bDex++];
        }
    }
 
    public static void display(int[] theArray,int size){
        for (int i = 0; i < size; i++) {
            System.out.print(theArray[i] + " ");
        }
        System.out.println("");
    }
 
    public static void main(String[] args) {
 
        int[] arrayA = {23,47,81,95};
        int[] arrayB = {7,14,39,59,62,74};
        int[] arrayC = new int[10];
 
        merge(arrayA, 4, arrayB, 6, arrayC);
        display(arrayC,10);
    }
 
}

---------------------------------------------------

代码升级

ps:更优雅了,有木有

public class MergeSortss {

    public static void merge(int[] A,int m,int[] B,int n,int[] arrayC){
        int i = 0,j = 0,k = 0;
      while(k<(m+n)) {
          if(j==n||(i<m&&A[i]<B[j])) {
              arrayC[k++]=A[i++];
          } else {
                  arrayC[k++]=B[j++];
              }
              
          }
      }
    
 
    public static void display(int[] theArray,int x){
        for (int i = 0; i < x; i++) {
            System.out.print(theArray[i] + " ");
        }
        System.out.println("");
    }
 
    public static void main(String[] args) {
 
        int[] A = {14,23,95};
        int[] B = {1,7,39,59,62,74};
        int[] C = new int[10];
 
        merge(A, 3, B, 6, C);
        display(C,9);
    }
 
}

 

转载于:https://www.cnblogs.com/nulinulizainuli/p/10526939.html

你可能感兴趣的文章
[spfa] Jzoj P4722 跳楼机
查看>>
代码审计入门后审计技巧
查看>>
Linux-Rsync服务器/客户端搭建实战
查看>>
接口和抽象类有什么区别
查看>>
简单通过百度api自动获取定位-前端实现
查看>>
180117 我的宠物识别判断语句
查看>>
JavaScript修炼之道pdf
查看>>
自己动手构造编译系统++编译、汇编与链接pdf
查看>>
JAVA 中文件读写函数BufferedReader 和 BufferedWriter 的使用
查看>>
Codeforces Round #206 (Div. 2)
查看>>
提升混合应用页面打开速度的新思路
查看>>
Mycat分表分库
查看>>
2019.7.11
查看>>
Php取扩展名
查看>>
模板的文件名和方法名一定要一致!!
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
外观模式(Facade Pattern)
查看>>
PHP-----数组和常见排序算法
查看>>