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

    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) = a*T(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
  • 相关阅读:
    Beyond Compare比较图片怎么修改背景颜色
    Leonardo's Notebook UVALive
    Saddle Point ZOJ
    概率dp总结 正在更新
    First Knight UVALive
    Scout YYF I POJ
    RedIsGood TopCoder
    聪聪和可可 HYSBZ
    So you want to be a 2n-aire? UVA
    国家队论文集
  • 原文地址:https://www.cnblogs.com/superfly123/p/10524769.html
Copyright © 2011-2022 走看看