0
点赞
收藏
分享

微信扫一扫

归并排序(Java实现)

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] arr = {5, 4, 3, 2, 1};
        solution.mergeSort(arr, 0, arr.length-1);
    }

    private int max = Integer.MAX_VALUE;

    private void merge(int[] arr, int p, int q, int r) {
        int n1 = q - p + 1;
        int n2 = r - q;
        int[] left = new int[n1 + 1];
        int[] right = new int[n2 + 1];

        int i;
        for (i = 0; i < n1; i++) {
            left[i] = arr[p + i];
        }
        left[i] = max;

        for (i = 0; i < n2; i++) {
            right[i] = arr[q + i + 1];
        }
        right[i] = max;

        int j = 0;
        i = 0;
        for (int k = p; k <= r; k++) {
            if (left[i] > right[j]) {
                arr[k] = right[j];
                j++;
            } else {
                arr[k] = left[i];
                i++;
            }
        }
    }

    private void mergeSort(int[] arr, int begin, int end) {
        int mid;
        if (begin < end) {
            mid = (begin + end) >> 1;
            mergeSort(arr, begin, mid);
            mergeSort(arr, mid + 1, end);
            merge(arr, begin, mid, end);
        }
    }
}

举报

相关推荐

0 条评论