zoukankan      html  css  js  c++  java
  • 归并排序

    相当高效的稳定排序算法,但空间复杂度较大。

    典型的分治思想。而将两个有序的数组合并起来也很简单,只需另开一个数组再不断取它们的较小值即可。

    public static void mergeSort(int[] A){
        mergeSortDo(A, 0, A.length-1);
    }
    
    private static void mergeSortDo(int[] A, int low, int high){
        if(low < high){
            int mid = (low + high) / 2;
            mergeSortDo(A, low, mid);
            mergeSortDo(A, mid+1, high);
            merge(A, low, mid, high);
        }    
    }
    
    private static void merge(int[] A, int low, int mid, int high){
        int i = low, j = mid + 1, k = 0;
        int[] tmp = new int[high - low + 1];
        while(i <= mid && j <= high){
            if(A[i] < A[j]){
                tmp[k ++] = A[i ++];
            }
            else{
                tmp[k ++] = A[j ++];
            }
        }
        while(i <= mid){
            tmp[k ++] = A[i ++];
        }
        while(j <= high){
            tmp[k ++] = A[j ++];
        }
        System.arraycopy(tmp, 0, A, low, tmp.length);
    }
    Java
  • 相关阅读:
    overflow妙用--去除默认滚动条,内容仍可滚动
    call()与构造函数的运用
    this与super
    构造方法
    多态
    抽象类与接口
    面向对象的基本特征
    类与对象
    面向过程与面向对象
    java自动拆装箱
  • 原文地址:https://www.cnblogs.com/7hat/p/3381324.html
Copyright © 2011-2022 走看看