排序算法(归并排序)

简介: 讲述了归并排序思想

归并排序是一种基于递归进行的一种排序算法
其:

空间复杂度为 O(n),时间复杂度为 O(nlogn)

归并排序是分治法思想运用的一个典范

如下图可以先将待排序数组分为两部分,之后在分别对这两部分进行排序。简单来说就是大事化小

图解

所谓递归其实就和它的名字一样先递推出去回归回来
归并排序就恰好和递归思想一致,先是将待排序数组进行拆分直到拆成一个个独立的数,也就可以联想到递归的“”:
image.png

接下来继续上面的操作直到不可再分
image.png
将其拆分完成后只需要加一个排序函数就可以利用递归的“”将其改为你想要的顺序:
image.png

递归排序C代码:

void Sort(int *arr, int left, int mid, int right)//排序函数
{
   
   
    int tmp[right-left+1];
    int l = left;
    int m = mid + 1;
    int i = 0;
    int j = 0;

    while(l <= mid && m <= right)
    {
   
   
        if (arr[l] > arr[m])
        {
   
   
            tmp[i++] = arr[m++];
        }
        else 
        {
   
   
            tmp[i++] = arr[l++];
        }        
    }
    while(l <= mid)
    {
   
   
        tmp[i++] = arr[l++];
    }
    while(m <= right)
    {
   
   
        tmp[i++] = arr[m++];
    }
    for (i = 0, j = left; j <=right; i++, j++)
    {
   
   
        arr[j] = tmp[i];
    }
}

void MergeSort(int *arr, int left, int right)//递归主体
{
   
   

    if (left >= right)
    {
   
   
        return;
    }
    int mid = (left + right) / 2; 
    MergeSort(arr, left, mid);
    MergeSort(arr, mid + 1, right);
    Sort(arr, left, mid, right);
}

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