归并排序最好、最坏、评均时间复杂度nlog(n),空间复杂度O(n),是一种稳定排序算法
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int[]arr={8,4,5,9,1,3,7,6,5,7};
sort(0,arr.length-1,arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int start, int end, int[] arr) {
if (start < end) {
int mid = (start + end) / 2;
sort(start, mid, arr);
sort(mid + 1, end, arr);
merge(start,mid,end,arr);//合并
}
}
public static void merge(int start, int mid, int end, int[] arr) {
int i = start;
int j = mid + 1;
int k = 0;
int[] temp=new int[end-start+1];//临时数组,存放合并后的结果
//合并有序数组到临时数组
while (i <= mid && j <= end) {
if (arr[i] < arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= end) {
temp[k++] = arr[j++];
}
int m=start;
for(i=0;i<end-start+1;i++){//合并后的部分结果拷贝回原数组
arr[m++]=temp[i];
}
}
}