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 函数对其进行排序,然后打印排序后的结果。

相关推荐
青云交15 分钟前
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用
java·spark·lstm·可视化·java 大数据·空气质量监测·污染溯源
森语林溪30 分钟前
大数据环境搭建从零开始(十七):JDK 17 安装与配置完整指南
java·大数据·开发语言·centos·vmware·软件需求·虚拟机
郝开1 小时前
Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
java·spring boot·spring
小猪咪piggy2 小时前
【项目】小型支付商城 MVC/DDD
java·jvm·数据库
知兀2 小时前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring
向葭奔赴♡2 小时前
Spring IOC/DI 与 MVC 从入门到实战
java·开发语言
mm-q29152227292 小时前
【天野学院5期】 第5期易语言半内存辅助培训班,主讲游戏——手游:仙剑奇侠传4,端游:神魔大陆2
人工智能·算法·游戏
早退的程序员2 小时前
记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
java·http·maven
向阳而生,一路生花2 小时前
redis离线安装
java·数据库·redis
Tigshop开源商城系统2 小时前
Tigshop 开源商城系统 php v5.1.9.1版本正式发布
java·大数据·开源·php·开源软件