基本思想:将排序元素分成大小大致相同的两个子序列,分别对两个子序列进行归序排序,最终将子序列合并为所求的排列好的完整序列。
- 该排序时间复杂度为:

package algorithm;
import java.util.ArrayList;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int[] arr = {8,25,41,96,34,51,6,33,80,60,15};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr) {
int[] b =new int[arr.length];
mergeSort(arr, b, 0, arr.length-1);
}
//将数组递归的分成
public static void mergeSort(int[] a,int[] b,int left,int right){
if(left<right){
int mid = (left+right)/2;
//对左侧子序列进行归并排序
mergeSort(a,b,left,mid);
//对右侧子序列进行归并排序
mergeSort(a, b, mid+1, right);
merge(a,b,left,mid,right);
}
}
private static void merge(int[] a, int[] b, int left, int mid, int right) {
int i = left;
int j = mid+1;
//b数组的初始指针位置
int t = 0;
//按照a数组中的大小排序放入b数组中
while (i<=mid&&j<=right){
if (a[i]<a[j]){
b[t++]=a[i++];
}else {
b[t++] = a[j++];
}
}
//放入多余的左侧子序列中的数字
while (i<=mid){
b[t++] = a[i++];
}
//放入多余的右侧子序列中的数字
while (j<=right){
b[t++] = a[j++];
}
t=0;
while (left<=right){
a[left++] = b[t++];
}
}
}
本文介绍了一种高效的排序算法——归并排序。通过递归将数组分成小部分进行排序,然后合并这些已排序的部分来实现整体排序。展示了完整的Java实现代码,并解释了其基本思想和时间复杂度。
869

被折叠的 条评论
为什么被折叠?



