package MergeSort; /** * 归并排序 * @author root * */ public class MergeSort { static int[] data = {0,2,4,5,3,1,7,6}; public static void main(String[] args) { // TODO Auto-generated method stub sort(data, 1, data.length-1); print(data); } //二路归并算法 public static void sort(int[] data, int low, int high){ if(low<high){ int mid = (low+high)/2; sort(data, low, mid); sort(data, mid+1, high); merge(data, low, mid, high); } } //归并两个数组,将data中data[i]-data[m]和data[m+1]-data[n]归并到target public static void merge(int[] data, int low, int mid, int high){ if(low==high){ return; } int[] target = new int[high-low+1]; int i=low; int j=mid+1; int k=0; while(i<=mid && j<=high){ if(data[i]<=data[j]){ target[k++] = data[i++]; }else{ target[k++] = data[j++]; } } while(i<=mid){ target[k++] = data[i++]; } while(j<=high){ target[k++] = data[j++]; } for(i=0,j=low; i<target.length; i++,j++){ data[j]=target[i]; } } public static void print(int[] data){ for(int i=1; i<data.length; i++){ System.out.print(data[i]); } System.out.println(); } }