算法编程(四):合并两个有序数组

134 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

写在前面

今天我们继续来学习一道难度定义为简单层次的LeetCode算法题:合并两个有序数组;欢迎大家关注我的专栏。

本道题主要是考察排序算法的熟练使用。

image.png

题目解读

我对本道题的解读主要还是侧重于排序算法,题目的描述说了很多,总结下来,其实就是将一个数组合并到另外一个数组当中。

并且将合并后的数组元素进行排序。

这里我是先将数组nums1和nums2进行无差别合并到nums1数组中。

然后针对nums1进行排序。

没有什么新颖的办法,只是使用了冒泡排序法。

当然了,也可以不选择两步操作,直接一步到位也是可以做到的。

通过每次的对比,来确定最后的元素值的确切位置。

代码实现

public class Solution {

    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.merge(new int[]{1, 2, 3, 0, 0, 0}, 3, new int[]{2, 5, 6}, 3);
    }

    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i != n; ++i) {
            nums1[m + i] = nums2[i];
        }
        for (int i = 0; i < nums1.length; i++) {
            for (int j = i + 1; j < nums1.length; j++) {
                if (nums1[i] > nums1[j]) {
                    int temp = nums1[i];
                    nums1[i] = nums1[j];
                    nums1[j] = temp;
                }
            }
        }
        for (int a : nums1) {
            System.out.println(a);
        }
    }

}

执行结果:

冒泡排序的效率还行吧,但是还有待提高。

image.png

其他思路

直接使用Java中的Arrays.sort方法进行排序,果然效率排名老差了。

image.png

总结

这道题,要执行成功太容易了,java的话就只是一个方法便能解决了,但是要想要自己去实现一次,也只能利用元素移位的概念来处理,或者是使用各种排序算法来解决此问题。