归并排序
- 在
main 方法中,初始化一个整数数组 arr,然后打印出排序前的数组内容。创建一个临时数组 temp,其长度与 arr 相同,为后续排序过程提供空间。调用 mergeSort 方法启动归并排序过程,排序完成后,再次打印数组,以显示排序后的结果。
printArr 方法用于打印数组的所有元素,该方法使用增强 for 循环遍历数组,并将每个元素打印到控制台。
mergeSort 方法是归并排序的核心,它使用递归方式将数组不断分割成较小的子数组,直到每个子数组仅包含一个元素。通过不断地分割和合并子数组,最终实现整个数组的排序。
merge 方法是用于合并两个已排序的子数组为一个新的已排序数组。它通过比较两个子数组的元素大小,将较小的元素顺序放入临时数组 temp 中。当其中一个子数组的元素全部放入 temp 后,将另一个子数组的剩余元素也依次放入。最后,使用 System.arraycopy 方法将 temp 中的元素复制回原始数组 arr 中对应的位置。
public class MergeSort {
public static void main(String[] args) {
int[] arr = {5, 4, 10, 6, 55, 2}
System.out.print("排序前:")
printArr(arr)
int[] temp = new int[arr.length]
mergeSort(arr, 0, arr.length - 1, temp)
System.out.print("排序后:")
printArr(arr)
}
public static void printArr(int[] arr) {
for (int i : arr) {
System.out.print(i + " ")
}
System.out.println()
}
public static void mergeSort(int[] arr, int start, int end, int[] temp) {
if (start >= end) {
return
}
int mid = start + (end - start) / 2
mergeSort(arr, start, mid, temp)
mergeSort(arr, mid + 1, end, temp)
merge(arr, start, end, mid, temp)
}
public static void merge(int[] arr, int start, int end, int mid, int[] temp) {
int l = start
int r = mid+1
int k = 0
while (l <= mid && r <= end) {
if (arr[l] <= arr[r]) {
temp[k++] = arr[l++]
} else {
temp[k++] = arr[r++]
}
}
while (l <= mid) {
temp[k++] = arr[l++]
}
while (r <= end) {
temp[k++] = arr[r++]
}
System.arraycopy(temp, 0, arr, start, end - start + 1)
}
}