码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2019-03-13 18:24:02      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:code   公式   test   归并   main   oid   ges   static   mergesort   

package Test01;

public class MergeSort {
    public static void main(String[] args) {
        int[] arr = { 3, 2, 9, 8, 7, 2, 2, 0, 0 ,1}; // 要排序的数组
        MergeSortSort(arr);
        for (int i : arr) { // 打印排序后的数组
            System.out.print(i);
        }
    }

    private static void MergeSortSort(int[] arr) { // 归并排序
        if (arr == null || arr.length < 2) {
            return;
        }
        sortProcess(arr, 0, arr.length - 1);

    }

    public static void sortProcess(int[] arr, int L, int R) {
        if (L == R)
            return;

        int mid = (L + R) / 2; // 分治的思想
        sortProcess(arr, L, mid);
        sortProcess(arr, mid + 1, R);
        merge(arr, L, mid, R);   //外排?
    }

    public static void merge(int[] arr, int L, int mid, int R) {
        int a = L;
        int b = mid + 1;
        int i = 0;
        int[] help = new int[R - L + 1];
        while (a <= mid && b <= R) {
            help[i++] = (arr[a] < arr[b]) ? arr[a++] : arr[b++];
        }
        while (b <= R) {
            help[i++] = arr[b++];
        }
        while (a <= mid) {
            help[i++] = arr[a++];
        }
        for(i=0;i<help.length;i++) {
            arr[L+i] = help[i];
        }
    }

}

剖析递归行为和递归行为时间复杂度的估算

一个递归行为的例子
master公式的使用
T(N) = aT(N/b) + O(N^d)
1) log(b,a) > d -> 复杂度为O(N^log(b,a)) 2) log(b,a) = d -> 复杂度为O(N^d
logN) 3) log(b,a) < d -> 复杂度为O(N^d)
补充阅读:www.gocalf.com/blog/algorithm-complexity-and-mastertheorem.html

归并排序

标签:code   公式   test   归并   main   oid   ges   static   mergesort   

原文地址:https://www.cnblogs.com/superfly123/p/10524769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!