• 归并排序 l


    package mytest;
    
    import java.util.Arrays;
    
    /**
     * @author :l_coil
     * @date :2021/12/11 9:29 下午
     * 归并排序
     */
    public class MergeSort {
        public static void main(String[] args) {
            int[] ints = {3, 1, 4, 8, 7, 5, 2};
            int[] result = sort(ints);
            System.out.println(Arrays.toString(result));
        }
    
        public static int[] sort(int[] sourceArray) {
            int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
            //只有一个元素
            if (arr.length < 2) {
                return arr;
            }
            // 取出将整体划分为 2 路的中间节点
            int middle = (int) Math.floor(arr.length / 2);
    
            // 递归划分子集—逐步裂变
            int[] left = sort(Arrays.copyOfRange(arr, 0, middle));
            int[] right = sort(Arrays.copyOfRange(arr, middle, arr.length));
            // 合并,通过改变递归数组的长度,逐步收拢子集
            return merge(left, right);
        }
    
        public static int[] merge(int[] left, int[] right) {
            int[] result = new int[left.length + right.length];
            int i = 0;
            // 归并已排序两个子集
            while (left.length > 0 && right.length > 0) {
                if (left[0] <= right[0]) {
                    result[i++] = left[0];
                    left = Arrays.copyOfRange(left, 1, left.length);
                } else {
                    result[i++] = right[0];
                    right = Arrays.copyOfRange(right, 1, right.length);
                }
            }
            // 假如两个数组大小比对排序合并之后,left数组还存有剩余比之前元素大的,直接将剩余元素添加到合并集
            while (left.length > 0) {
                result[i++] = left[0];
                left = Arrays.copyOfRange(left, 1, left.length);
            }
            // 假如两个数组大小比对排序合并之后,right数组还存有剩余比之前元素大的,直接将剩余元素添加到合并集
            while (right.length > 0) {
                result[i++] = right[0];
                right = Arrays.copyOfRange(right, 1, right.length);
            }
    
            return result;
        }
    }
    

      

    本文来自博客园,作者:l-coil,转载请注明原文链接:https://www.cnblogs.com/l-coil/p/15678409.html

  • 相关阅读:
    UDP协议测试
    openstack ussusi ubuntu 20 centos8 dracut initqueue timeout
    wol linux远程通过数据帧自动开机
    openStack proformancee bottlenecks options optimized
    find 搜索排除搜索目录
    Ipv6
    golang学习笔记 ---日志库 logrus
    golang学习笔记---- 格式化IO
    golang学习笔记 --- struct 嵌套
    golang学习笔记---HTTPS
  • 原文地址:https://www.cnblogs.com/l-coil/p/15678409.html
Copyright © 2020-2023  润新知