java两个有序的数组的排序

这篇博客讨论了如何在Java中合并两个已排序的数组A1和A2,其中A1有足够的空间容纳A2。不同于归并排序,该方法直接在A1的末尾插入A2的元素并保持整体有序。通过计算合并后数组的长度,初始化一个指针指向A1末尾,然后使用双指针策略遍历两个数组,将较大值放入对应位置,从而实现排序合并。

题目:有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请写一个函数,把A2的所有数字插入A1中,并且所有的数字是排序的。

题目上的条件是内存在A1的末尾有足够的空余空间容纳A2。所以跟归并排序还不太一样。跟上一篇文章的替换空格的解决方案很像。

首先计算merged后数组的总长度。声明一个指针indexMerged,指向merged后的数组的末尾。
声明两个数组索引指针,分布遍历两个数组,比较值的大小,将较大的值放在indexMerged的位置中,indexMerged指针向前移动一位,继续遍历即可。

demo:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int[] A1= {1,2,3,5,0,0,0,0,0,0,0};
        int[] A2={0,2,3,6,7,8,9};
        merge(A1,A2,4,7);
        System.out.println(Arrays.toString(A1));

    }

    public static void merge(int[] A1, int[] A2,int lengthA1, int lengthA2){
        int indexA1=lengthA1 -1;
        int indexA2=lengthA2 -1;
        int indexMerged = lengthA1 + lengthA2 -1;
        while(indexA1>=0 && indexA2>=0){
            if(A1[indexA1]>A2[indexA2]){
                A1[indexMerged] =A1[indexA1];
                indexMerged--;
                indexA1--;
            }else{
                A1[indexMerged] =A2[indexA2];
                indexMerged--;
                indexA2--;
            }
        }
        while (indexA2>=0){
            A1[indexMerged] =A2[indexA2];
            indexMerged--;
            indexA2--;
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值