十大排序之Merge Sort 归并排序

简介: 十大排序之Merge Sort 归并排序

Merge Sort 归并排序

归并排序(Merge Sort)是一种常用的排序算法,其思路如下:

  1. 将待排序数组分成两个子数组,分别对两个子数组进行递归排序。
  2. 将两个已排序的子数组合并成一个有序数组。

以下是归并排序的具体步骤:

  1. 将待排序数组从中间分成两个子数组。
  2. 递归地对左右两个子数组进行归并排序。
  3. 将两个已排序的子数组合并成一个有序数组。

以下是归并排序的示例代码:

public class Sort {
    public static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {
            int mid = (left + right) / 2;
            mergeSort(arr, left, mid); // 对左子数组进行递归排序
            mergeSort(arr, mid + 1, right); // 对右子数组进行递归排序
            merge(arr, left, mid, right); // 合并两个已排序的子数组
        }
    }
    private static void merge(int[] arr, int left, int mid, int right) {
        int n1 = mid - left + 1;
        int n2 = right - mid;
        int[] leftArr = new int[n1];
        int[] rightArr = new int[n2];
        for (int i = 0; i < n1; i++) {
            leftArr[i] = arr[left + i];
        }
        for (int j = 0; j < n2; j++) {
            rightArr[j] = arr[mid + 1 + j];
        }
        int i = 0;
        int j = 0;
        int k = left;
        while (i < n1 && j < n2) {
            if (leftArr[i] <= rightArr[j]) {
                arr[k] = leftArr[i];
                i++;
            } else {
                arr[k] = rightArr[j];
                j++;
            }
            k++;
        }
        while (i < n1) {
            arr[k] = leftArr[i];
            i++;
            k++;
        }
        while (j < n2) {
            arr[k] = rightArr[j];
            j++;
            k++;
        }
    }
    public static void main(String[] args) {
        int[] array = {5, 2, 8, 12, 1, 6};
        mergeSort(array);
        System.out.println("排序结果:");
        for (int num : array) {
            System.out.print(num + " ");
        }
    }
}

归并排序的时间复杂度始终为O(n log n),无论是最好情况、最坏情况还是平均情况下。

归并排序的空间复杂度为O(n),因为需要使用额外的空间来存储临时数组。

归并排序是一种稳定的排序算法,适用于各种数据规模。

相关文章
|
机器学习/深度学习 人工智能 搜索推荐
底层技术大揭秘!AI智能导购如何重塑购物体验
双十一期间,淘宝内测AI助手“淘宝问问”,基于阿里通义大模型,旨在提升用户在淘宝上的商品搜索和推荐效率。该助手通过品牌推荐、兴趣商品推荐和关联问题三大板块,提供个性化购物体验。其背后采用多智能体架构,包括规划助理和商品导购助理,通过对话历史和用户输入,实现精准商品推荐。此外,文章还介绍了如何快速部署此解决方案,并探讨了其对现代购物体验的影响。
|
弹性计算 安全 Linux
1分钟畅玩!一键部署幻兽帕鲁联机服务器
1分钟畅玩!一键部署幻兽帕鲁联机服务器,如何自建幻兽帕鲁服务器?基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了,一看就懂系列。
345 1
|
Cloud Native 持续交付 开发者
云端之旅:探索云原生应用的构建与部署
【9月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,深入探讨云原生应用的构建和部署。通过实际的代码示例和详细的步骤说明,我们将揭开云原生技术的神秘面纱,展示如何利用这些技术来创建灵活、可扩展的应用。无论你是云原生领域的新手还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和技能。
262 0
|
存储 C++
软件开发入门教程网 之C++ 数据结构
软件开发入门教程网 之C++ 数据结构
JAVA练习小游戏——本地双人联机乒乓球小游戏
JAVA练习小游戏——本地双人联机乒乓球小游戏
|
人工智能 JSON 安全
能听懂语音的ChatGPT来了:10小时录音扔进去,想问什么问什么
能听懂语音的ChatGPT来了:10小时录音扔进去,想问什么问什么
444 0
|
新零售 图形学 容器
带你读《2022技术人的百宝黑皮书》——全景封面视频生成技术在淘宝的应用(9)
带你读《2022技术人的百宝黑皮书》——全景封面视频生成技术在淘宝的应用(9)
211 0
|
消息中间件 Cloud Native 大数据
带你读《企业级云原生白皮书项目实战》——6.3.2 RocketMQ 在陪伴体系中的应用
带你读《企业级云原生白皮书项目实战》——6.3.2 RocketMQ 在陪伴体系中的应用
267 0
|
弹性计算 Linux 应用服务中间件
打卡第二天
加入7天训练营是全新的体验,再接再厉!
412 0
|
机器学习/深度学习 人工智能 区块链
AI3.0:「哈希图」来了!它将如何变革区块链和人工智能技术?
人工智能的发展给我们带来了无数的惊喜和恐惧,一方面我们的生活越来越编辑,另一方面,我们被机器人取代的可能性也越来越大。下一代AI技术将带来怎样的变革?David Allen Cohen在研究了哈希图技术后认为,AI3.0将过去30年对AI技术、机器人学习以及多智能体系统的研究优势同区块链和DLT技术相结合,最终实现了新兴的工业4.0,即数十亿的设备将连接至互联网,并需要在边缘网络进行实时调节。
3859 0