1. 什么是归并排序?
- 天下大势,合久必分,分久必合
2. 归并排序的思想
3. 代码实现,以及性能测试
package com.qin.sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class MergerSort {
public static void main(String[] args) {
int[] arr = {8,4,5,7,1,3,6,2};
int[] temp = new int[arr.length];
mergeSort(arr,0,arr.length-1,temp);
System.out.println("归并排序后"+ Arrays.toString(arr));
int[] arr1 = new int[80000];
int[] temp1 = new int[arr1.length];
for (int i = 0; i < 80000; i++) {
arr1[i] = (int)(Math.random()*80000000);
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat.format(date1);
mergeSort(arr1,0,arr1.length-1,temp1);
Date date2= new Date();
String format2 = simpleDateFormat.format(date2);
System.out.println("运行前"+format1);
System.out.println("运行后"+format2);
}
public static void mergeSort(int[] arr,int left,int right,int[] temp){
if (left<right){
int mid = (left+right)/2;
mergeSort(arr,left,mid,temp);
mergeSort(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 i = left;
int j = mid + 1;
int t = 0;
while (i<=mid && j<=right){
if (arr[i]<=arr[j]){
temp[t] = arr[i];
i++;
t++;
}else {
temp[t] = arr[j];
j++;
t++;
}
}
while (i<=mid){
temp[t] = arr[i];
i++;
t++;
}
while (j<=right){
temp[t] = arr[j];
j++;
t++;
}
t = 0;
int tempLeft = left;
while (tempLeft<=right){
arr[tempLeft] = temp[t];
t++;
tempLeft++;
}
}
}
- 结果,以及性能测试