一.简介
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。即先使每个子序列有序,再使子序列间有序。
二.实现
package com.vincent;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception{
int[] arr = new int[32];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random() * 100);
}
System.out.println(Arrays.toString(arr));
mergeSort(arr,0,arr.length,new int[arr.length]);
System.out.println(Arrays.toString(arr));
}
public static void mergeSort(int[] arr,int start,int end,int[] tmp){
if(end - start > 1){//确保至少有2个数据,否则将会无限循环
//对数据切分
int mid = (start + end) / 2;
mergeSort(arr,start,mid,tmp);
mergeSort(arr,mid,end,tmp);
//对数据合并排序
int pos = 0;
int i=start,j=mid;
while(i < mid && j < end){
if(arr[i] <= arr[j]){
tmp[pos++] = arr[i++];
}
else{
tmp[pos++] = arr[j++];
}
}
//把剩下数据放到有序数组中
while(i<mid){
tmp[pos++] = arr[i++];
}
while(j<end){
tmp[pos++] = arr[j++];
}
//把有序数据放到原数组
System.arraycopy(tmp,0,arr,start,end-start);
}
}
}
效果:
总结
时间复杂度:O(NlogN)