算法 - 合并两个有序数组成一个有序数组

Posted 割肉机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法 - 合并两个有序数组成一个有序数组相关的知识,希望对你有一定的参考价值。

最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。

题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。

有两种实现思路:

1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。

2. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。

第一种方式应该是大多数人想到的,也比较容易实现,下面主要来实现第二种方式。

代码如下:

技术分享图片

public static int[] MergeList(int a[],int b[])
{
int result[];
// 定义一个新数组,长度为两个数组长度之和
result = new int[a.length+b.length];
//i:a数组下标 j:b数组下标 k:新数组下标
int i=0,j=0,k=0;
// 按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环
while(i<a.length && j<b.length)
if(a[i] <= b[j]) {
result[k++] = a[i++];
print(result);
System.out.println();
}else{
result[k++] = b[j++];
}
/* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 *
* 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/
while(i < a.length)
result[k++] = a[i++];
while(j < b.length)
result[k++] = b[j++];
return result;
}


技术分享图片























以上是关于算法 - 合并两个有序数组成一个有序数组的主要内容,如果未能解决你的问题,请参考以下文章

算法4 整理

算法--两个有序数组合并

算法 - 两个有序数组合并成一个有序数组

算法作业!!求两个不等长有序数组的中位数!

找出n个有序数组中第K小的数。怎么写算法啊?各位帮帮忙!

小C秋招面试算法题:合并k个有序数组合并k个有序链表(分治思想)