1、思想
也是分治思想,利用递归和分治技术将数据序列划分为越来越小的半子集,对半子集排序,再用递归方法将排好序的半子集合并为大的有序序列。
2、时间复杂度
最好 O(nlogn) ,最坏O(nlogn),平均O(nlogn)。
3、代码实现
public class mergeSort {
public static void MergeSort(int[] arr){
Sort(arr, 0, arr.length-1);
}
private static void Sort(int[] arr, int left, int right) {
if(left < right){
int mid = (left + right)/2;
Sort(arr, left, mid);
Sort(arr, mid+1,right);
Merge(arr, left, mid, right);
}
}
private static void Merge(int[] arr, int left, int mid, int right) {
int[] temparr = new int[arr.length];
int thrif = left;
int center = mid+1;
int temp = left;
while (left <= mid && center <= right){
if(arr[left] >= arr[center]){
temparr[thrif++] = arr[center++];
}else{
temparr[thrif++] = arr[left++];
}
}
while(left <= mid){
temparr[thrif++] = arr[left++];
}
while(center <= right){
temparr[thrif++] = arr[center++];
}
while(temp <= right){
arr[temp] = temparr[temp++];
}
}
public static void main(String[] args){
int[] data = { 9, -16, 21, 23, -30, -49, 21, 30, 30 };
System.out.println(" 排 序 之 前 : \n" +
java.util.Arrays.toString(data));
MergeSort(data);
System.out.println(" 排 序 之 后 : \n" +
java.util.Arrays.toString(data));
}
}
来源:oschina
链接:https://my.oschina.net/u/3991724/blog/3207363