public class MergeSortTest {
public static void main(String[] args){
int[] arrs = new int[]{3,5,6,2,4,1,6,8,4,3,0};
mergeSort(arrs,0,arrs.length - 1);
System.out.println(Arrays.toString(arrs));
}
public static void mergeSort(int[] arrs,int begin,int end){
int middle = arrs.length / 2; //一分为二
//分别初始化左右两边数组
int[] left = new int[middle - begin];
int[] right = new int[end - middle + 1];
for(int i = 0; i < middle - begin;i++){
left[i] = arrs[i + begin];
}
for(int i = 0; i < end - middle + 1; i++){
right[i] = arrs[i + middle];
}
//分别对左右两边数组作归并
if(left.length > 1) mergeSort(left,0,left.length - 1);
if(right.length > 1) mergeSort(right,0,right.length - 1);
//合并左右两边数组
merge(arrs,left,right);
}
//执行merge的前提是left与right都已经排好序
public static void merge(int[] arrs,int[] left,int[] right){
int m = 0;
int n = 0;
for(int j = 0; j < arrs.length;j++){
if(m == left.length){
arrs[j] = right[n];
n++;
continue;
}
if(n == right.length){
arrs[j] = left[m];
m++;
continue;
}
if(left[m] < right[n]){
arrs[j] = left[m];
m++;
}else{
arrs[j] = right[n];
n++;
}
}
}
}
排序算法之归并排序
最新推荐文章于 2024-06-17 11:36:39 发布
1177

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



