package cn.aust.zyw.demo; /** * Created by zyw on 2016/2/15. */ public class MergeSort2 { public static void main(String args[]){ int a[]={3,2,5,6,1,7,4}; mergeSort(a); for(int i=0;i<a.length;i++){System.out.print(a[i]+" ");} } public static void mergeSort(int[] array) { sortArray(array, 0, array.length - 1); } //merge合并 public static void merge(int a[],int low,int mid,int high){ int i=low; int m=mid+1; int k=0; int temp[]=new int[high-low+1]; while(i<=mid&&m<=high){ if(a[i]>a[m]){ temp[k++]=a[m++]; }else{ temp[k++]=a[i++]; } }
while (i<=mid){ temp[k++]=a[i++]; } while (m<=high){ temp[k++]=a[m++]; } for(k=0,i=low;i<=high;i++,k++){ a[i]=temp[k]; } } //sortArray分组 public static void sortArray(int[] array, int start, int end) { if (start == end) { return; } int sortSize = end - start + 1; int seperate; if (sortSize % 2 == 0) { seperate = start + sortSize / 2 - 1; } else { seperate = start + sortSize / 2; } sortArray(array, start, seperate); sortArray(array, seperate + 1, end); merge(array, start, seperate, end); } }