Java实现归并排序算法

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 函数负责将两个已排序的子数组合并成一个排序数组。它创建两个临时数组 leftArrayrightArray 来存储左右子数组的内容,然后通过比较左右子数组的元素,依次将较小的元素放入原数组中。

printArray 函数用于打印数组元素。

main 函数中,我们创建一个示例数组,并调用 sort 函数对其进行排序,然后打印排序后的结果。

相关推荐
rururunu3 小时前
Windows 下切换 Java 环境太复杂了,我做了个 cli 工具,可以快速安装,切换 Java 版本
java
qq_452396233 小时前
第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
java·开发语言·jmeter
澈2073 小时前
二叉搜索树:高效增删查的秘诀
java·开发语言·算法
青云计划3 小时前
Spring
java·后端·spring
yychen_java3 小时前
深度解析电力交易系统的“硬核”战场
java·能源
无敌昊哥战神3 小时前
大模型(LLM)推理优化技术全景总结
python·算法·大模型
平行侠3 小时前
A10 恶劣环境传感器信号仿真与统计检验台
算法
洛水水4 小时前
【力扣100题】34.二叉搜索树中第K小的元素
c++·算法·leetcode
_深海凉_4 小时前
LeetCode热题100-翻转二叉树
算法·leetcode·职场和发展