考研算法31天:归并排序 【归并排序,分治】

这篇具有很好参考价值的文章主要介绍了考研算法31天:归并排序 【归并排序,分治】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法介绍

归并算法其过程分为三步:

1.分:递归到最下面

2.治:两个元素之间排序。

3。归:递归到最下层然后返回,从两个元素变成四个元素再排序。

如下图所示:

考研算法31天:归并排序 【归并排序,分治】

动态图如下:

考研算法31天:归并排序 【归并排序,分治】

算法题目

考研算法31天:归并排序 【归并排序,分治】

算法ac代码:文章来源地址https://www.toymoban.com/news/detail-505468.html

#include <iostream>

using namespace std;

const int N = 1000010;
int q[N], w[N];

void merge_sort(int left,int right){
    //向下递归
    if(left>=right) return;
    int mid = (left + right)>>1;
    merge_sort(left,mid),merge_sort(mid+1,right);
//分到只有两个的的时候开始递回
    int l = left, r = mid+1;
    int i=0,j;
//将排序好的数组片段先放到其他数组中去
    while(l<=mid&&r<=right){
        // cout<<"q[l]:"<<q[l]<<"q[r]:"<<q[r]<<endl;
        if(q[l]<q[r]) w[i++] = q[l++];
        else w[i++] = q[r++];
        
    }
//如果左边或者是右边没有全部放入证明是最大的几个数,依次放入即可
    while(l<=mid) w[i++] = q[l++];
    while(r<=right) w[i++] = q[r++];
//将排序好的数组片段放回原先的数组中去,片段数组排序结束
    for(i=0,j=left;j<=right;i++){
        q[j++] = w[i];
    }
    return;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)scanf("%d",&q[i]);
    merge_sort(0,n-1);
    for(int i=0;i<n;i++)printf("%d ",q[i]);
    return 0;
}

到了这里,关于考研算法31天:归并排序 【归并排序,分治】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • C++算法 —— 分治(2)归并

    C++算法 —— 分治(2)归并

    本篇前提条件是已学会归并排序 912. 排序数组 排序数组也可以用归并排序来做。 剑指 Offer 51. 数组中的逆序对 如果暴力枚举,一定是可以解决问题的,但肯定不用这个解法。选择逆序对,可以先把数组分成两部分,左半部分 + 右半部分的逆序对,以及再找左半部分的数字和

    2024年02月10日
    浏览(11)
  • 算法:分治思想处理归并递归问题

    算法:分治思想处理归并递归问题

    利用归并思想进行分治也是很重要的一种思路,在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的,归并排序要能写出来: 以上为归并排序基本算法原理,基于这个原理可以解决逆序对问题,逆序对问题通常问法是,给定某一个数据,在整个数组中找比这

    2024年02月10日
    浏览(11)
  • 【数据结构】- 排序(详细介绍几种排序算法!!!*直接插入排序,*希尔排序,*选择排序,*堆排序,*冒泡排序,*快速排序,*归并排序)

    【数据结构】- 排序(详细介绍几种排序算法!!!*直接插入排序,*希尔排序,*选择排序,*堆排序,*冒泡排序,*快速排序,*归并排序)

    排序无处不在,所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 内部排序 :数据元素全部放在内存中的排序。 外部排序 :数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。 今天

    2024年01月20日
    浏览(36)
  • 归并算法:分治而治的高效算法大揭秘(图文详解)

    归并算法:分治而治的高效算法大揭秘(图文详解)

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《数据结构算法》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 归并算法是我们算法中最常见的算法之一,其思想非常巧妙。本身归并是只能归并有序数组但是当我们利用了二路归并分治法之后,就可以使用归并的思想来帮我

    2024年02月03日
    浏览(10)
  • 【数据结构与算法】归并排序详解:归并排序算法,归并排序非递归实现

    【数据结构与算法】归并排序详解:归并排序算法,归并排序非递归实现

    归并排序是一种经典的排序算法,它使用了分治法的思想。下面是归并排序的算法思想: 递归地将数组划分成较小的子数组,直到每个子数组的长度为1或者0。 将相邻的子数组合并,形成更大的已排序的数组,直到最终得到一个完全排序的数组。 归并排序的过程可以分为三

    2024年01月22日
    浏览(15)
  • 【算法专题】分治 - 快速排序

    做题链接 - Leetcode -75.颜色分类 题目 :给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情

    2024年02月05日
    浏览(16)
  • 考研算法35天:三元组的最小距离 【双指针,滑动窗口,多路归并】

    考研算法35天:三元组的最小距离 【双指针,滑动窗口,多路归并】

    多路归并;多路归并算法从理论到应用(易懂)_留恋单行路的博客-CSDN博客 多路归并就是将多个已经归并排序排好序的数组再进行排序(不一定是通过归并排序)。 这道题就是一般做法是先通过排序将三个数组排好然后再进行三指针求最小。但是我们仔细考虑一下,如果我们先

    2024年02月12日
    浏览(12)
  • 数据结构——归并排序和计数排序的介绍

    数据结构——归并排序和计数排序的介绍

    归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列。即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

    2024年02月11日
    浏览(8)
  • 【排序算法】归并排序与快速排序

    【排序算法】归并排序与快速排序

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️ 算法训练笔记       🛰️社区 :✈️ 进步学堂       🛰️欢迎关注:👍点赞🙌收藏✍️留言 今天给大家分享两种排序,一种是

    2024年01月19日
    浏览(32)
  • 【算法】排序——归并排序和计数排序

    【算法】排序——归并排序和计数排序

     ========================================================================= 主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法头疼记: 算法专栏  ========================

    2024年02月08日
    浏览(4)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包