登录
首页 >  文章 >  java教程

归并排序算法

时间:2025-01-23 13:36:42 206浏览 收藏

哈喽!今天心血来潮给大家带来了《归并排序算法》,想必大家应该对文章都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习文章,千万别错过这篇文章~希望能帮助到你!

归并排序算法详解

归并排序算法

归并排序的核心思想是分治:将数组不断分割成更小的子数组,直到每个子数组只包含一个元素(此时已排序),然后逐步合并这些子数组,在合并过程中完成排序。排序发生在合并阶段,而非分割阶段。

图解归并排序

首先,我们有一个待排序的数组:

归并排序算法

将其分成两个子数组:

归并排序算法

继续递归分割,直到每个子数组只有一个元素:

归并排序算法

接下来是合并和排序阶段,每次合并两个已排序的子数组,得到一个新的已排序的数组:

归并排序算法

最终得到完全排序的数组:

归并排序算法

Java代码实现及优化

初始代码存在效率问题,主要体现在数组元素的复制和合并逻辑上。以下提供优化后的代码:

import java.util.Arrays;

public static void mergeSort(int[] array) {
    int n = array.length;
    if (n < 2) {
        return; // 数组长度小于2,无需排序
    }

    int middle = n / 2;
    int[] left = Arrays.copyOfRange(array, 0, middle);
    int[] right = Arrays.copyOfRange(array, middle, n);

    mergeSort(left);
    mergeSort(right);

    int i = 0, j = 0, k = 0;
    while (i < left.length && j < right.length) {
        if (left[i] <= right[j]) {
            array[k++] = left[i++];
        } else {
            array[k++] = right[j++];
        }
    }

    while (i < left.length) {
        array[k++] = left[i++];
    }

    while (j < right.length) {
        array[k++] = right[j++];
    }
}

此优化版本使用Arrays.copyOfRange()高效地复制数组,并简化了合并过程中的比较和赋值逻辑,提高了代码的可读性和效率。

祝您学习愉快!

本篇关于《归并排序算法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>