• 归并排序算法


    归并排序,也就是将一个数组无限次的对半拆分 一直拆分数量为1的时候 将两个数量为1的数组比较大小合并为有序的,再依次往上合并
    如果班上有10个小学生{1, 5, 2, 6, 7, 3, 4, 8,9,10} 先将小学生分成2组,A组{1,5,2,6,7}和B组{3,4,8,9,10}
    再将A组拆分为两组 A1组{1,5},A2组{2,6,7}
    A1组再拆分为A11{1} A12{5} 将A11 和A12合并得出A1{1,5}
    A2组拆分为A21{2},A22{6,7}
    A22组拆分为A221{6} A222{7}
    先合并A221 和A222 得出A22{6,7}
    A21 和A22合并 得出A2{2,6,7}
    A1和A2合并 得出A{1,2,5,6,7}
    同理 B组归并之后为{3,4,8,9,10}
    最后A组和B组合并 结果为{1,2,3,4,5,6,7,8,9,10}
    讲一下怎么合并的 拿A组和B组归并来说
    A组{1,2,5,6,7}
    B组{3,4,8,9,10}
    先建一个结果数组result 长度为A.length+B.length 长度为10
    开始从A组和B组数字里找数字填入result
    两个变量i 和j 分别表示数组A和B的索引
    可能存在一种情况 如果i >=A.length 那就说明A组中的数组取完了 直接拿B的就好 同理j >=B.length 就说明B组中的数取完了
    假设正常比较 那应该是比较 A[i]和B[j]的值哪个符合条件 如果A符合条件 那么result[index]=A[i] 赋值完后将i++ 下一次比较就从A组里的下一个元素开始
    代码:
      public static int[] mergeSort(int[] array) {
            if (array.length < 2) {
                return array;
            }
            int mid = array.length / 2;
            int[] left = Arrays.copyOfRange(array, 0, mid);
            int[] right = Arrays.copyOfRange(array, mid, array.length);
            int[] int1 = mergeSort(left);
            int[] int2 = mergeSort(right);
            int[] merge = merge(int1, int2);
            return merge;
        }
    
        /**
         * 归并排序——将两段排序好的数组结合成一个排序数组
         *
         * @param left
         * @param right
         * @return
         */
        private static int[] merge(int[] left, int[] right) {
            int[] result = new int[left.length + right.length];
            for (int index = 0, i = 0, j = 0; index < result.length; index++) {
                if (i >= left.length) {
                    result[index] = right[j++];
                } else if (j >= right.length) {
                    result[index] = left[i++];
                } else if (left[i] > right[j]) {
                    result[index] = right[j++];
                } else {
                    result[index] = left[i++];
                }
            }
    
            return result;
        }


    不和别人一样,不复制只真正理解
  • 相关阅读:
    Android 媒体存储服务(二)
    Android 媒体存储服务(一)
    MTP in Android详解
    Source Insight 常用设置和快捷键大全
    Android 中onSaveInstanceState和onRestoreInstanceState学习
    Android RadioButton 语言无法切换问题
    Android 中onConfigurationChanged问题
    欢迎访问我的CSDN博客
    Java-异常
    Java-finally相关问题
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12896163.html
Copyright © 2020-2023  润新知