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;
        }
    }
  • 相关阅读:
    移动端input中的placeholder属性垂直
    js将文字转化为语音并播放
    js生成二维码
    jquery移除事件,绑定事件,触发事件
    js计算本地时间
    正则判断支付金额
    去除input默认带的上下按钮与修改placeholder的默认颜色、背景、placeholder内容的大小
    rem自适应手机端布局
    Python_PyQt5_库
    Python_用PyQt5 建 notepad 界面
  • 原文地址:https://www.cnblogs.com/tracer-dhy/p/7474903.html
Copyright © 2011-2022 走看看