归并排序,是创建在归并操作上的一种有效的排序算法。归并排序又称合并排序,递归的实现一般用到分治法的思想。
归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。
归并排序代码实现
package cxy;
import org.jetbrains.annotations.NotNull;
public class one {
public static void merge_sort(int @NotNull [] arr) {
int len = arr.length;
int[] result = new int[len];
int block, start;
for(block = 1; block < len*2; block *= 2) {
for(start = 0; start <len; start += 2 * block) {
int low = start;
int mid = Math.min((start + block), len);
int high = Math.min((start + 2 * block), len);
//两个块的起始下标及结束下标
int start1 = low;
int start2 = mid;
//开始对两个block进行归并排序
while (start1 < mid && start2 < high) {
result[low++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];
}
while(start1 < mid) {
result[low++] = arr[start1++];
}
while(start2 < high) {
result[low++] = arr[start2++];
}
}
int[] temp = arr;
arr = result;
result = temp;
}
result = arr;
}
}