/**
* 归并排序
* @author Administrator
*
*/
public class MergeSort {
// 入口
public static void mergeSort(int[] arr){
if(arr == null || arr.length < 2)
return ;
mergeSort(arr, 0, arr.length - 1);
}
// 排序
public static void mergeSort(int[] arr, int left, int right){
if(left == right)
return ;
int mid = left + ((right - left) >> 1);
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
// 归并
public static void merge(int[] arr, int left, int mid, int right){
int[] help = new int[right - left + 1];
int i = 0;
int p1 = left;
int p2 = mid + 1;
while(p1 <= mid && p2 <= right) {
help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
while(p1 <= mid){
help[i++] = arr[p1++];
}
while(p2 <= right){
help[i++] = arr[p2++];
}
for(i = 0;i < help.length;i++){
arr[left + i] = help[i];
}
}
public static void main(String[] args) {
int[] arr = {213,12,43,1247,68,234,6,789,90,43,145,67,9,3,2};
mergeSort(arr);
for (int i : arr) {
System.out.println(i);
}
}
}