归并排序

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

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

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
原文地址:https://www.cnblogs.com/7hat/p/3381324.html