package com.sort;
/**
 * 
 * @author Administrator
 *nlogn
 */
public class MergeSort {
  
  private static void merge(int [] source,int left,int right){
    if(left==right){
      return;
    }
    int middle=(left+right)/2;
    merge(source,left,middle);
    merge(source,middle+1,right);
    int[]tmp=new int[right-left+1];
    int l=0;
    int lindex=left;
    int rindex=middle+1;
    for(;lindex<=middle;){
      if(rindex>right){
        break;
      }
      if(source[lindex]<source[rindex]){
        tmp[l++]=source[lindex];
        lindex++;
      }else{
        tmp[l++]=source[rindex];
        rindex++;
      }
    }
    if(lindex==middle+1&&rindex<=right){
      for(;rindex<=right;rindex++){
        tmp[l++]=source[rindex];
      }
    }
    if(rindex>right&&lindex<=middle){
      for(;lindex<=middle;lindex++){
        tmp[l++]=source[lindex];
      }
    }
    
    l=0;
    for(int x=left;x<=right;x++){
      source[x]=tmp[l++];
    }
  }
  public static void main(String[] args) {
    int[] data=new int[]{4,5,2,9,1,0,7};
    for(int i=0;i<data.length;i++){
      System.out.print(data[i]+" ");
    }
    System.out.println();
    merge(data,0,data.length-1);;
    for(int i=0;i<data.length;i++){
      System.out.print(data[i]+" ");
    }
    System.out.println();
  }
}