【算法】归并排序算法

简介: 归并排序是一种将递归和分治结合到一起实现的一种排序算法。将一个序列通过递归拆分为越来越小的半子序列,然后再对半子序列合并为 一个大的有序序列。

算法简介

  归并排序是一种将递归和分治结合到一起实现的一种排序算法。将一个序列通过递归拆分为越来越小的半子序列,然后再对半子序列合并为 一个大的有序序列。

算法思想

  归并排序算法可以分为递归和归并两部分。首先对一个序列进行递归,要将一个序列排序,先要将序列的前半部分排序,然后再将序列的后半部分,要排序前半部分又将前半部分分为两部分,依次递归。。。 当递归到一个元素的时候,不用排序,一个元素本身已经是有序的了。然后便是合并操作,将左右两个有序的序列合并为一个序列,然后一级一级递归,直到整个序列合并完成。

  归并排序图解如下:

归并排序图解

代码示例

//将数组arr中[l,r]内的元素进行归并
void merge(int arr[], int l,int r)
{
    int* temp = (int*)malloc(sizeof(int)*(r-l+1));
    memcpy(temp,arr+l,sizeof(int)*(r-l+1));
    int middle = (l+r)/2;
    int indexl=l,indexr = middle+1;
    for(int i=l;i<=r;i++){
        if(indexl > middle){
            arr[i] = temp[indexr-l];
            indexr++;
        }else if(indexr > r){
            arr[i] = temp[indexl-l];
            indexl++;
        }else if(temp[indexl-l] > temp[indexr-l]){
            arr[i] = temp[indexr-l];
            indexr++;
        }else{
            arr[i] = temp[indexl-l];
            indexl++;
        }
    }
}

//将数组arr中的[l,r]区间内的元素进行排序
void MergeSort(int arr[], int l,int r)
{
    if(l>=r) return;
    int mid = (l+r)/2;
    MergeSort(arr,l,mid);
    MergeSort(arr,mid+1,r);
    merge(arr,l,r);
}
目录
相关文章
|
28天前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
18 1
|
5月前
|
机器学习/深度学习 算法 搜索推荐
【初阶算法4】——归并排序的详解,及其归并排序的扩展
【初阶算法4】——归并排序的详解,及其归并排序的扩展
【初阶算法4】——归并排序的详解,及其归并排序的扩展
|
1月前
|
存储 搜索推荐 算法
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
|
1月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
66 0
|
1月前
|
搜索推荐 Java Go
深入了解归并排序算法
深入了解归并排序算法
18 0
|
6月前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
37 0
|
3月前
|
算法 搜索推荐 Java
算法实战:手写归并排序,让复杂排序变简单!
归并排序是一种基于“分治法”的经典算法,通过递归分割和合并数组,实现O(n log n)的高效排序。本文将通过Java手写代码,详细讲解归并排序的原理及实现,帮助你快速掌握这一实用算法。
41 0
|
3月前
|
数据采集 搜索推荐 算法
【高手进阶】Java排序算法:从零到精通——揭秘冒泡、快速、归并排序的原理与实战应用,让你的代码效率飙升!
【8月更文挑战第21天】Java排序算法是编程基础的重要部分,在算法设计与分析及实际开发中不可或缺。本文介绍内部排序算法,包括简单的冒泡排序及其逐步优化至高效的快速排序和稳定的归并排序,并提供了每种算法的Java实现示例。此外,还探讨了排序算法在电子商务、搜索引擎和数据分析等领域的广泛应用,帮助读者更好地理解和应用这些算法。
39 0
|
4月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
【7月更文挑战第12天】归并排序是高效稳定的排序算法,采用分治策略。Python 实现包括递归地分割数组及合并已排序部分。示例代码展示了如何将 `[12, 11, 13, 5, 6]` 分割并归并成有序数组 `[5, 6, 11, 12, 13]`。虽然 $O(n log n)$ 时间复杂度优秀,但需额外空间,适合大规模数据排序。对于小规模数据,可考虑其他算法。**
76 4
|
4月前
|
算法 搜索推荐 C#