package com.zhang.reflection.面试.排序;
public class 归并排序 {
public static void merge(int[] arr,int low,int mid,int high) {
int[] temp=new int[high-low+1];
int i=low; //左指针
int j=mid+1; //右指针
int k=0;
//先把小的数组全部移到新数组中去
while(i<=mid&&j<=high) {
if(arr[i]<arr[j]) {
temp[k++]=arr[i++];
}else {
temp[k++]=arr[j++];
}
}
//如果左边有剩余,全部移进去
while(i<=mid) {
temp[k++]=arr[i++];
}
//如果右边有剩余,全部移进去
while(j<=high) {
temp[k++]=arr[j++];
}
//用排好序的新数组覆盖排序前的数组
for(int t=0;t<temp.length;t++) {
arr[low+t]=temp[t];
}
}
public static void mergeSort(int[] arr,int low,int high) {
int mid=low+(high-low)/2;
if(low<high) {
//左边
mergeSort(arr,low,mid);
//右边
mergeSort(arr,mid+1,high);
//归并
merge(arr,low,mid,high);
}
}
public static void main(String[] args){
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
mergeSort(arr,0,12);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}