归并排序,分治法
import java.util.Arrays;
public class Main_05 {
public static final int MAX = 10000;
/**
* 分归并排序,分治法
* @author 1016795105@qq.com
* @param args
*/
public static void main(String[] args) {
int [] num = new int[MAX];
for (int i = 0; i < MAX; i++) {
num[i] = MAX -i;
}
merge_sort(num,0,num.length-1);
Arrays.stream(num).forEach(System.out::println);
}
//方法入口
public static void merge_sort(int[] num, int left, int right) {
if(left >= right) return;
int middle = (right + left) / 2;
merge_sort(num, left, middle);
merge_sort(num, middle+1, right);
merge(num,left,right,middle);
}
//合并方法
public static void merge(int[] num, int left, int right, int middle) {
int saveLeft = left;
int saveRight = right;
//右半边开始
int rightStart = middle + 1;
//暂存
int[] save = new int[right - left + 1];
int i = 0 ;
//归并
while (left <= middle && rightStart <= right) {
if(num[left] <= num[rightStart]){
save[i++] = num[left++];
}else{
save[i++] = num[rightStart++];
}
}
while (rightStart <= right){
save[i++] = num[rightStart++];
}
while (left <= middle){
save[i++] = num[left++];
}
//覆盖
for (i = saveLeft; i <= saveRight; i++) {
num[i] = save[i - saveLeft];
}
}
}
来源:https://blog.csdn.net/qq_40666620/article/details/100972390