public class 归并排序1 {
public static void sort(int[] arr) {
int left = 0;
int right = arr.length - 1;
devide(arr, left, right);
}
private static void devide(int[] arr, int left, int right) {
int mid = (left + right) / 2;
if (left < right) {
devide(arr, left, mid);
devide(arr, mid + 1, right);
merge(arr, left, mid, mid + 1, right);
}
}
private static void merge(int[] arr, int left, int mid, int i, int right) {
int[] temp = new int[arr.length];
int m = left;//m为temp数组的起始索引
int ls = left, le = mid;//ls为左边数组的起始索引
int rs = i, re = right;//rs为右边数组的起始索引
//至少排完一边
while (ls <= le && rs <= re) {
if (arr[ls] < arr[rs]) {
temp[m++] = arr[ls];
ls++;
} else {
temp[m++] = arr[rs];
rs++;
}
}
if (ls <= le) {
for (int j = ls; j <= le; j++) {
temp[m++] = arr[j];
}
}
if (rs <= re) {
for (int j = rs; j <= re; j++) {
temp[m++] = arr[j];
}
}
for (int j = left; j <= right; j++) {
arr[j] = temp[j];
}
}
}
test:
public class Test1 {
public static void main(String[] args) {
int[] a = {23, 12, 45, 56, 49};
归并排序1.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
Output: