引用百度百科的介绍:
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并排序是一种稳定的排序方法
时间复杂度是O(nlogn)
public class MergeSort {
public static void main(String[] args) {
int[] arr = {4,1,5,2,2,7,5,6,0,9};
int len = arr.length;
//从小到大归并排序
mergeSort(arr, 0, len-1);
for(int i=0; i<len; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
private static void mergeSort(int[] arr, int st, int en) {
if(st < en) {
//将当前序列分为两个长度差不多的两个序列
int mid = (st + en) / 2;
mergeSort(arr, st, mid);
mergeSort(arr, mid+1, en);
//将分好的序列进行合并排序
merge(arr, st, mid, en);
}
}
private static void merge(int[] arr, int st, int mid, int en) {
int[] t = new int[en-st+1];
int i = st;
int j = mid + 1;
int k = 0;
while(i <= mid && j <= en) {
if(arr[i] <= arr[j])
t[k++] = arr[i++];
else
t[k++] = arr[j++];
}
while(i <= mid)
t[k++] = arr[i++];
while(j <= en)
t[k++] = arr[j++];
for(i=0; i<k; i++)
arr[st+i] = t[i];
}
}
运行结果:
如有错误或不合理的地方,敬请指正哦~
加油!!