public class 归并排序 {
public static void mereSorInt(int[] array, int low, int high) {
if (low >= high) {
return;
}
//分解
int mid = (low + high) >>> 1;
mereSorInt(array, low, mid);//分割成一个元素
mereSorInt(array, mid + 1, high);
//进行合并
merge(array, low, mid, high);
}
private static void merge(int[] array, int low, int mid, int high) {
int s1 = low;//第一段开始
int s2 = mid + 1;//第二段开始
int len = high - low + 1;
int[] ret = new int[len];
int i = 0;//表使ret的下标
while (s1 <= mid && s2 <= high) {//证明两段都有数据
if (array[s1] <= array[s2]) {
ret[i++] = array[s1++];
} else {
ret[i++] = array[s2++];
}
}
while (s1 <= mid) {
ret[i++] = array[s1++];
}
while (s2 <= high) {
ret[i++] = array[s2++];
}
for (int j = 0; j < ret.length; j++) {
array[j + low] = ret[j];
}
}
public static void mergeSort(int[] array) {
mereSorInt(array, 0, array.length - 1);
}
}
归并排序
最新推荐文章于 2024-07-08 22:12:26 发布