合并两个有序数组

本文介绍了一种合并两个有序数组的方法,提供了三种不同的实现方案。通过示例代码展示了如何将两个有序数组合并为一个新的有序数组,重点讲解了直接排序、逆序合并及归并排序等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

代码分析:

import java.util.Arrays;

public class 合并两个有序数组 {
    /**
     * 方法一
     * @param A
     * @param m
     * @param B
     * @param n
     */
//    public void merge(int A[], int m, int B[], int n) {
//        for(int i=0;i<n;i++){
//            A[m+i]=B[i];
//        }
//        Arrays.sort(A);
//    }

    /**
     * 方法二
     * @param args
     */
//    public void merge(int A[], int m, int B[], int n){
//        // 当n为0时,不需要合并
//       if(n==0){return;}
//       // 当m为0时,并且n不为0,需要将B拷贝到A
//       else if(m==0){
//           for(int i=0;i<n;i++){
//               A[i] = B[i];
//           }
//           return;
//       }
//        // 当两个数组都为0,不做操作
//       if(m==0&&n==0) return;
//        // 分别记录A,B的最右边位置
//        int i=m-1;
//        int j =n-1;
//        // A,B合并后的数组的角标
//        int index = m+n-1;
//        // B数组数据取完为结束信号
//        while(j>=0){
//            // A数组还未取完
//            if(i>=0){
//                if(A[i]>B[j]){
//                    A[index] = A[i];
//                    i--;
//                }else{
//                    A[index]=B[j];
//                    j--;
//                }
//                // A数组已取完,将B逆序添加到A后
//            }else{
//                A[index]=B[j];
//                j--;
//            }
//            // 每次添加一个数进去,指针就向前移
//            index --;
//
//        }
//    }

    /**
     * 方法三  归并排序
     *  //args
     */

    public void merge(int A[], int m, int B[], int n){
        int i = m+n-1;
        while (m>0&&n>0){
            if(A[m-1]>=B[n-1]){
                A[i] =A[m-1];
                m--;
                i--;
            }else{
                A[i] = B[n-1];
                n--;
                i--;
            }
        }
        //若A数组为空 将B数组赋值到A数组
        while(n>0){
            A[i] = B[n-1];
            n--;
            i--;
        }
    }
    public static void main(String[] args) {
        合并两个有序数组 s = new 合并两个有序数组();
        int[] nums1 = {1,2,3,0,0,0};
        int m = 3;
        int[] nums2 = {2,5,6};
        int n = 3;

        s.merge(nums1, m, nums2, n);
        System.out.println(nums1[5]);
    }
}

结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值