代码
package sort;
/**
* 合并两个有序数组
*
* https://leetcode.cn/problems/merge-sorted-array/submissions/358529482/
*
* @author javaself
* @date 2023/7/28
*/
class MergeArray {
/**
* 合并排序
*
* ----------------------------------------------------------------
* leetcode刷题版本
*
* @param nums1 数组1
* @param m 数组1大小
* @param nums2 数组2
* @param n 数组2大小
* @author javaself
*/
public static void merge(int[] nums1, int m, int[] nums2, int n) {
// log.info("排序之前:{}", Arrays.toString(nums1));
// log.info("排序之前:{}", Arrays.toString(nums2));
// log.info("");
int p1 = 0, p2 = 0; //双指针扫描
int[] newArra = new int[m + n]; //新数组
int temp;
int i = 1; //用于打印日志
while (p1 < m || p2 < n) {
//找到小数据
if (p1 == m) { //边界条件:如果数组1已经结束,就循环复制数组2到新数组
temp = nums2[p2++];
} else if (p2 == n) { //边界条件:如果数组2已经结束,就循环复制数组1到新数组
temp = nums1[p1++];
} else if (nums1[p1] < nums2[p2]) { //找到小数据:如果数组1的数据较小,就写入新数组
temp = nums1[p1++];
} else { //找到小数据:如果数组2的数据较小,就写入新数组
temp = nums2[p2++];
}
//插入小数据到新数组
newArra[p1 + p2 - 1] = temp;
// log.info("第{}趟:{}", i++, Arrays.toString(newArra));
}
// log.info("");
// log.info("排序之后:{}", Arrays.toString(newArra));
//复制新数组数据到数组1
for (int j = 0; j < newArra.length; j++) {
nums1[j] = newArra[j];
}
}
}