归并排序
递归
public static void sort1(int[] array, int low, int high) {
int mid = (low + high) / 2;
if (low < high) {
sort(array, low, mid);
sort(array, mid + 1, high);
merge1(array, low, mid, high);
}
}
private static void merge1(int[] array, int low, int mid, int high) {
int[] temp = new int[high - low + 1];
int i = low;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= high) {
if (array[i] < array[j]) {
temp[k++] = array[i++];
} else {
temp[k++] = array[j++];
}
}
while (i <= mid) {
temp[k++] = array[i++];
}
while (j <= high) {
temp[k++] = array[j++];
}
for (int l = 0; l < temp.length; l++) {
array[low + l] = temp[l];
}
}
归并排序从小到大的将数组进行排序。
非递归
public static void sort2(int[] array) {
int len = 1;
while (len <= array.length) {
for (int i = 0; i + len < array.length; i += len * 2) {
int low = i;
int mid = i + len - 1;
int high = i + len * 2 - 1;
if (high > array.length - 1)
high = array.length - 1;
merge1(array, low, mid, high);
}
len *= 2;
}
}