Java实现归并排序算法
以下是Java中的归并排序算法实现示例:
public class MergeSort {
// 归并排序入口函数
public static void sort(int[] array) {
if (array == null || array.length <= 1)
return;
mergeSort(array, 0, array.length - 1);
}
// 归并排序递归函数
private static void mergeSort(int[] array, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(array, left, mid);
mergeSort(array, mid + 1, right);
merge(array, left, mid, right);
}
}
// 合并函数
private static void merge(int[] array, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
int[] leftArray = new int[n1];
int[] rightArray = new int[n2];
// 将数据拷贝到临时数组中
for (int i = 0; i < n1; i++) {
leftArray[i] = array[left + i];
}
for (int j = 0; j < n2; j++) {
rightArray[j] = array[mid + 1 + j];
}
// 归并临时数组
int i = 0, j = 0, k = left;
while (i < n1 && j < n2) {
if (leftArray[i] <= rightArray[j]) {
array[k++] = leftArray[i++];
} else {
array[k++] = rightArray[j++];
}
}
// 将剩余元素拷贝到原数组中
while (i < n1) {
array[k++] = leftArray[i++];
}
while (j < n2) {
array[k++] = rightArray[j++];
}
}
// 打印数组元素
public static void printArray(int[] array) {
for (int num : array) {
System.out.print(num + " ");
}
System.out.println();
}
// 测试示例
public static void main(String[] args) {
int[] array = {12, 4, 7, 2, 10, 1, 15, 3, 6, 11};
System.out.println("Original array:");
printArray(array);
sort(array);
System.out.println("Sorted array:");
printArray(array);
}
}
这段代码实现了归并排序算法。在 sort
函数中,我们首先检查数组是否为空或只有一个元素,如果是,则直接返回。否则,我们调用 mergeSort
函数来递归地执行归并排序。在 mergeSort
函数中,我们首先计算中间索引 mid
,然后分别对左右两部分数组进行归并排序,最后调用 merge
函数合并两个排好序的子数组。
merge
函数负责将两个已排序的子数组合并成一个排序数组。它创建两个临时数组 leftArray
和 rightArray
来存储左右子数组的内容,然后通过比较左右子数组的元素,依次将较小的元素放入原数组中。
printArray
函数用于打印数组元素。
在 main
函数中,我们创建一个示例数组,并调用 sort
函数对其进行排序,然后打印排序后的结果。