Merge Sorted Array

本文介绍了一种将两个已排序的整数数组A和B合并为一个排序数组的方法。提供了两种实现方式,一种是从数组头部开始合并,另一种是从尾部开始合并以减少元素移动,提高效率。

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

Given two sorted integer arrays A and B, merge B into A as one sorted array.

Note:
You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are m andn respectively.

方法一:从前往后
public class Solution {   //runtime = 247ms
    public void merge(int A[], int m, int B[], int n) {
    	int i = 0;
        if (m == 0){
        	for (i = 0; i < n; i ++){
        		A[i] = B[i];
        	}
        }
        int j = 0;
        int l;
        int h;
        while (i < m && j < n){
        	if (A[i] > B[j]){
        		l = i;
        		h = m;
        		while (l < h){
            		A[h] = A[h - 1];
            		h --;
            	}
            	A[i] = B[j];
        		System.out.print(A[i] + ",");
               	i ++;
               	j ++;
               	m ++;
               	}
        	else {
        		i++;
        		}
        	System.out.print(A[i] + ",");
        	}
        while (j < n){   //当A遍历结束而B还没遍历完时,直接将B中剩下的元素赋值给A
        	A[m] = B[j];
        	j ++;
        	m ++;
        }
        for (i = 0; i < m; i ++){
        	System.out.print(A[i] + ",");
        }
    }
}

方法二:从后往前,省去移动的时间
public class Solution {   //runtime = 212ms
	 public void merge(int A[], int m, int B[], int n) {
		 int k = m + n - 1;
		 int i = m - 1;
		 int j = n - 1;
		 while (j >= 0){
			 if (i >= 0 && (A[i] > B[j])){
				 A[k --] = A[i --];
			 }
			 else {
				 A[k --] = B[j --];
			 }
		 }
		 for (i = 0; i < m + n; i ++){
	        	System.out.print(A[i] + ",");
	        }
	 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值