前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法-归并排序

排序算法-归并排序

作者头像
承苏凯
发布2020-12-31 10:39:32
4640
发布2020-12-31 10:39:32
举报
文章被收录于专栏:唯手熟尔唯手熟尔

归并算法

本文内容:本文重要学习和掌握归并排序的思想以及实现

代码语言:javascript
复制
#include "iostream"
#include "algorithm"

using namespace std;

const int N = 1e6+10;
int q[N];
int tmp[N];

void mergeSort(int l,int r){

    if(l >= r) return;

    int mid = (l + r) / 2;

    mergeSort(l,mid);
    mergeSort(mid+1,r);

    int i = l,j = mid + 1;
    int cnt = 0;

    while(i <= mid && j <= r){
        if(q[i] < q[j]){
            tmp[cnt++] = q[i++];
        }else{
            tmp[cnt++] = q[j++];
        }
    }

    while(i <= mid){
        tmp[cnt++] = q[i++];
    }

    while(j <= r){
        tmp[cnt++] = q[j++];
    }

    for(int i = l,j = 0; i <= r; i++,j++){
        q[i] = tmp[j];
    }

}
int main(){

    int n;cin >> n;

    for(int i = 0; i < n; i++){
        cin >> q[i];
    }

    mergeSort(0,n-1);

    for(int i = 0; i < n; i++){
        cout << q[i] << ' ';
    }

    return 0;
}

总结

通过上面的图,将归并排序的整个流程走了一遍,归并的实质在于先分割到不能分割为止再合并,

合并的过程就是,将两个区间中的元素按照一定的规则放到另一个容器中,最后再将这个容器中的值复制到对应的结果集中。

易错的点在于归并的时候,将结果复制到结果集时,要按照对应的顺序进行复制,这是为什么?

在归并的时候实际上位置并没有发生改变,只是你需要把位置上的数重排序在放回到原来的位置

image-20201230213123103
image-20201230213123103
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 归并算法
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档