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

相关推荐
心之语歌1 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊2 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang2 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
AI软著研究员2 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish3 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Ray Liang4 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
颜酱4 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
Java水解4 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing8 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean8 小时前
Jackson View Extension Spring Boot Starter
java·后端