zoukankan      html  css  js  c++  java
  • 分治法

    package alg;
    
    import java.util.Arrays;
    
    /**
     * 分治法
     * Created by dinghaiyun on 2017/9/4.
     */
    public class DivideAndConquer {
        public static void main(String[] args) {
    
            int[] arr = new int[]{5, 2, 4, 7, 1, 3, 2, 6};
    
            mergeSort(arr, 0, arr.length - 1);
    
            System.out.println(" divide and conquer result:  " + Arrays.toString(arr));
    
        }
    
        private static void mergeSort(int[] arr, int p, int r) {
            if (p < r) {
                int q = (p + r) / 2;
    
                mergeSort(arr, p, q);
    
                mergeSort(arr, q + 1, r);
    
                merge(arr, p, q, r);
    
                System.out.println("mereResult : " + Arrays.toString(arr));
            }
    
        }
    
        private static int[] merge(int[] arr, int p, int q, int r) {
            int leftLen = q - p + 1;
            int rightLen = r - (q + 1) + 1;
            int[] arrLeft = new int[leftLen];
            int[] arrRight = new int[rightLen];
            for (int i = p; i <= q; i++) {
                arrLeft[i - p] = arr[i];
            }
            for (int i = q + 1; i <= r; i++) {
                arrRight[i - (q + 1)] = arr[i];
            }
    
            System.out.println("left:" + Arrays.toString(arrLeft) + ", right:" + Arrays.toString(arrRight));
            int i = 0, j = 0;
            int index = p;
            while (i < leftLen && j < rightLen) {
                if (arrLeft[i] < arrRight[j]) {
                    arr[index] = arrLeft[i];
                    i++;
                } else if (arrLeft[i] > arrRight[j]) {
                    arr[index] = arrRight[j];
                    j++;
                } else {
                    arr[index] = arrLeft[i];
                    arr[index + 1] = arrRight[j];
                    i++;
                    j++;
                    index++;
                }
                index++;
            }
    
            int increasement = 0;
            if (i != leftLen) {
                for (; i < leftLen; i++) {
                    arr[index + increasement] = arrLeft[i];
                    increasement++;
                }
    
            } else {
                for (; j < rightLen; j++) {
                    arr[index + increasement] = arrRight[j];
                    increasement++;
                }
            }
            return arr;
        }
    }
  • 相关阅读:
    SpringBoot系列之切换log4j日志框架
    SpringBoot系列之日志框架使用教程
    SpringBoot系列之集成logback实现日志打印(篇二)
    源码学习系列之SpringBoot自动配置(篇二)
    SpringBoot系列之@Conditional注解用法简介
    7.Maven命令
    6.Maven构建过程的各个环节
    5.Maven坐标
    4.用IntelliJ IDEA 创建Maven Web
    3.用IntelliJ IDEA 创建Maven
  • 原文地址:https://www.cnblogs.com/tracer-dhy/p/7474903.html
Copyright © 2011-2022 走看看