Java函数实现合并排序算法
发布时间:2023-07-02 17:33:50
合并排序算法(Merge Sort)是一种基于分治策略的排序算法,通过将待排序序列划分为两个子序列,对每个子序列进行递归排序,最后再将两个有序子序列合并成一个有序序列。合并排序算法的时间复杂度为O(nlogn),具有稳定性和适用于大规模数据的特点。
下面是Java实现合并排序算法的函数:
public class MergeSort {
public void mergeSort(int[] arr) {
if (arr == null || arr.length <= 1) {
return;
}
int[] temp = new int[arr.length]; // 用于暂存合并的结果
mergeSort(arr, 0, arr.length - 1, temp);
}
private void mergeSort(int[] arr, int start, int end, int[] temp) {
if (start < end) {
int mid = (start + end) / 2;
mergeSort(arr, start, mid, temp); // 对左侧子序列进行递归排序
mergeSort(arr, mid + 1, end, temp); // 对右侧子序列进行递归排序
merge(arr, start, mid, end, temp); // 合并两个有序子序列
}
}
private void merge(int[] arr, int start, int mid, int end, int[] temp) {
int i = start; // 左侧子序列的指针
int j = mid + 1; // 右侧子序列的指针
int k = 0; // 合并结果的指针
// 比较左右两个子序列中的元素,并将较小的放入合并结果数组中
while (i <= mid && j <= end) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
// 将左侧子序列剩余的元素放入合并结果数组中
while (i <= mid) {
temp[k++] = arr[i++];
}
// 将右侧子序列剩余的元素放入合并结果数组中
while (j <= end) {
temp[k++] = arr[j++];
}
// 将合并结果复制回原数组
for (i = 0; i < k; i++) {
arr[start + i] = temp[i];
}
}
public void printArray(int[] arr) {
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {3, 1, 5, 4, 2};
MergeSort mergeSort = new MergeSort();
mergeSort.mergeSort(arr);
mergeSort.printArray(arr);
}
}
以上是一个简单的Java程序,实现了合并排序算法。其中,mergeSort函数用于调用递归的合并排序函数,mergeSort函数用于对传入的子序列进行递归排序;merge函数用于合并两个有序子序列;printArray函数用于打印排序结果。
在main函数中,我们创建一个测试数组arr,并调用mergeSort函数对其进行排序,最后调用printArray函数打印排序结果。
通过以上代码,我们可以实现对任意数组的合并排序。
