java解一个比较特殊的数组合并题
程序员文章站
2024-02-29 11:42:58
给定两个排序后的数组a和b,其中a的末端有足够的空间容纳b,编写一个方法将b合并到a并排序。拿到这个题后,最直接的想法就是比较a和b中的元素,并按顺序插入数组,直到遍历完a...
给定两个排序后的数组a和b,其中a的末端有足够的空间容纳b,编写一个方法将b合并到a并排序。
拿到这个题后,最直接的想法就是比较a和b中的元素,并按顺序插入数组,直到遍历完a和b中的所有元素。但是这样做会有一个不好的地方:如果元素的插入位置在数组a的前端,那就必须将原来的数组往后移动。这会增加开销。但是我们可以使用另外的一种办法将元素插入数组a的末端。这样我们不会出现元素移动的情况!代码如下:
拿到这个题后,最直接的想法就是比较a和b中的元素,并按顺序插入数组,直到遍历完a和b中的所有元素。但是这样做会有一个不好的地方:如果元素的插入位置在数组a的前端,那就必须将原来的数组往后移动。这会增加开销。但是我们可以使用另外的一种办法将元素插入数组a的末端。这样我们不会出现元素移动的情况!代码如下:
复制代码 代码如下:
/*
* lasta:a中的实际元素数 lastb:b中的实际元素数 mergeindex是新数组的实际空间大小
*/
public static void mergeorder(int[] a, int[] b, int lasta, int lastb) {
int indexa = lasta - 1;
int indexb = lastb - 1;
int mergeindex = lasta + lastb - 1;
while (indexa >= 0 && indexb >= 0) {
if (a[indexa] > b[indexb]) {
a[mergeindex] = a[indexa];
mergeindex --;
indexa --;
} else {
a[mergeindex] = b[indexb];
mergeindex --;
indexb --;
}
}
while (indexb >= 0) {
a[mergeindex] = b[indexb];
mergeindex --;
indexb --;
}
}
* lasta:a中的实际元素数 lastb:b中的实际元素数 mergeindex是新数组的实际空间大小
*/
public static void mergeorder(int[] a, int[] b, int lasta, int lastb) {
int indexa = lasta - 1;
int indexb = lastb - 1;
int mergeindex = lasta + lastb - 1;
while (indexa >= 0 && indexb >= 0) {
if (a[indexa] > b[indexb]) {
a[mergeindex] = a[indexa];
mergeindex --;
indexa --;
} else {
a[mergeindex] = b[indexb];
mergeindex --;
indexb --;
}
}
while (indexb >= 0) {
a[mergeindex] = b[indexb];
mergeindex --;
indexb --;
}
}
上一篇: 分页显示之超级提速版
推荐阅读
-
java解一个比较特殊的数组合并题
-
Java实现把两个数组合并为一个的方法总结
-
java实现把两个有序数组合并到一个数组的实例
-
java实现把两个有序数组合并到一个数组的实例
-
Java实现把两个数组合并为一个的方法总结
-
java题求代码,4、现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5}
-
java题求代码,4、现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5}