合并两个数组
Posted 梵高先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并两个数组相关的知识,希望对你有一定的参考价值。
【题目】有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请实现一个函数,把A2中所有数字插入到A1中,并且所有的数字是排序的。
1. 从后往前比较A1和A2中的数字,并把较大的数字复制到A1的合适位置。
1 public class Main { 2 3 public static void main(String[] args) { 4 5 int[] arr1 = new int[100]; 6 arr1[0] = 1; 7 arr1[1] = 3; 8 arr1[2] = 4; 9 arr1[3] = 7; 10 arr1[4] = 9; 11 arr1[5] = 10; 12 arr1[6] = 23; 13 arr1[7] = 67; 14 int[] arr2 = { 4, 6, 8, 10, 22, 24, 26, 34, 37 }; 15 16 Main main = new Main(); 17 int[] result = main.process(arr1, arr2); 18 19 if (null != result) { 20 for (int i = 0; i < (8 + arr2.length); i++) { 21 System.out.print(result[i] + " "); 22 } 23 } 24 } 25 26 public int[] process(int[] arr1, int[] arr2) { 27 28 if (null == arr1 || null == arr2 29 || (0 == arr1.length && 0 == arr2.length)) { 30 return null; 31 } 32 33 if (0 == arr1.length && 0 != arr2.length) { 34 return arr2; 35 } 36 37 if (0 != arr1.length && 0 == arr2.length) { 38 return arr1; 39 } 40 41 // 求arr1中非0的元素个数 42 int index = 0; 43 for (int i = 0; i < arr1.length; i++) { 44 if (0 == arr1[i]) { 45 index = i; 46 break; 47 } 48 } 49 50 int p1 = index - 1; // arr1末尾指针 51 int p2 = arr2.length - 1; // arr2末尾指针 52 int p = index + arr2.length - 1; // arr3末尾指针 53 54 // 从后往前遍历arr1和arr2中的元素,并从后往前赋值到arr1中 55 while (p1 >= 0 && p2 >= 0) { 56 if (arr1[p1] >= arr2[p2]) { 57 arr1[p--] = arr1[p1--]; 58 } else { 59 arr1[p--] = arr2[p2--]; 60 } 61 } 62 63 while (p1 >= 0) { 64 arr1[p--] = arr1[p1--]; 65 } 66 67 while (p2 >= 0) { 68 arr1[p--] = arr2[p2--]; 69 } 70 71 return arr1; 72 } 73 }
以上是关于合并两个数组的主要内容,如果未能解决你的问题,请参考以下文章