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

相关推荐
Slow菜鸟1 小时前
Java开发规范(十一)| 数据全生命周期治理规范—Java应用的“数据资产化手册”
java·servlet·oracle
丸码2 小时前
Java异常体系全解析
java·开发语言
v***88562 小时前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
q***49452 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
IMPYLH2 小时前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
曾经的三心草2 小时前
基于正倒排索引的Java文档搜索引擎1-实现索引模块-实现Parser类
java·开发语言·搜索引擎
vx_bscxy3222 小时前
告别毕设焦虑!Python 爬虫 + Java 系统 + 数据大屏,含详细开发文档 基于web的图书管理系统74010 (上万套实战教程,赠送源码)
java·前端·课程设计
小欣加油2 小时前
leetcode 1018 可被5整除的二进制前缀
数据结构·c++·算法·leetcode·职场和发展
字节拾光录2 小时前
Java工具库三足鼎立:Hutool、Apache Commons、Guava深度测评与场景化选型指南
java·apache·guava