归并排序代码

public class Main{
    public static void main(String[] args){
        int[] A = {5,2,6,3,1,10,9};
        mergeSort(A, 0, A.length - 1);
        for(int i = 0; i < A.length; i++){
            System.out.print(A[i] + " ");
        }
        System.out.println();
    }

    public static void mergeSort(int[] A, int left, int right){
        if(left < right){
            int mid = left + (right - left) / 2;
            mergeSort(A, left, mid);
            mergeSort(A, mid + 1, right);
            merge(A, left, mid, right);
        }
    }
    public static void merge(int[] A, int left, int mid, int right){
        int lenL = mid - left + 1;
        int lenR = right - mid;
        int[] AL = new int[lenL + 1];
        int[] AR = new int[lenR + 1];
        for(int i = 0; i < lenL; i++){
            AL[i] = A[left + i];
        }
        for(int i = 0; i < lenR; i++){
            AR[i] = A[mid + i + 1];
        }
        AL[lenL] = Integer.MAX_VALUE;
        AR[lenR] = Integer.MAX_VALUE;
        int i = 0, j = 0;
        for(int k = left; k <= right; k ++){
            if(AL[i] <= AR[j]){
                A[k] = AL[i];
                i ++;
            }
            else{
                A[k] = AR[j];
                j ++;
            }
        }
    }
}

输出:

1 2 3 5 6 9 10

猜你喜欢

转载自www.cnblogs.com/zhaijiayu/p/11609748.html