归并排序
package Sort;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int[] arr=Number.getArr(10);
int[] temp=new int[arr.length];
System.out.println(Arrays.toString(arr));
sort(arr,0,arr.length-1,temp);
System.out.println(Arrays.toString(arr));
}
//分解
public static void sort(int[] arr,int left,int right,int[] temp) {
if (left<right) {
int mid=(left+right)/2;
sort(arr, left, mid, temp);
sort(arr, mid+1, right, temp);
merge(arr,left,mid,right,temp);
}
}
//归并
public static void merge(int[] arr,int left,int mid,int right,int[] temp) {
int l=left;
int r=mid+1;
int t=0;
while (l<=mid && r<=right) {
if (arr[l]<arr[r]) {
temp[t++]=arr[l++];
}else {
temp[t++]=arr[r++];
}
}
while (l<=mid) {
temp[t++]=arr[l++];
}
while (r<=right) {
temp[t++]=arr[r++];
}
t=0;
int leftIndex=left;
while (leftIndex<=right) {
arr[leftIndex++]=temp[t++];
}
}
}