码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-11-14 16:36:49      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:else   技术分享   自己   return   system   length   ++   new   toolbar   

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

题目:有两个数组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;
}


技术分享图片

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

标签:else   技术分享   自己   return   system   length   ++   new   toolbar   

原文地址:https://www.cnblogs.com/williamjie/p/9958285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!