归并排序采取了分治的思想,每次分别排左半边和右半边,不断递归调用自己,直到只有一个元素递归结束,开始回溯,调用merge函数,合并两个有序序列,再合并的时候每次给末尾追上一个最大int这样就不怕最后一位的数字不会被排序。

#include <bits/stdc++.h>
using namespace std;
void merge(int a[],int n,int left ,int mid,int right);
void merge_sort(int a[],int n,int left,int right);
const int Maxn=5e5;
const int Sentinel=0x3f3f3f3f;
int L[Maxn/2],R[Maxn/2];
int cnt;
int main()
{int n;int a[1000];cin>>n;for(int i=0;i<n;i++) cin>>a[i];merge_sort(a,n,0,n);for(int i=0;i<n;i++) cout<<a[i]<<' ';
}
void merge(int a[],int n,int left ,int mid,int right)
{int n1=mid-left;int n2=right-mid;for(int i=0;i<n1;i++) L[i]=a[left+i];for(int i=0;i<n2;i++) R[i]=a[mid+i];L[n1]=R[n2]=Sentinel;int i=0,j=0;for(int k=left;k<right;k++){cnt++;if(L[i]<R[j]){a[k]=L[i++];}else{a[k]=R[j++];}}
}
void merge_sort(int a[],int n,int left,int right)
{if(left<right){int mid=(left+right)>>1;merge_sort(a,n,left,mid);merge_sort(a,n,mid+1,right);merge(a,n,left,mid,right);}
}

————————————————————————————————————————————
以上为实现原理,借助C++的merge函数可以简化merge_sort()代码。

#include <bits/stdc++.h>
using namespace std;
void merge_sort(int a[],int n,int left,int right);
const int Maxn=5e5;
int main()
{int n;int a[Maxn];cin>>n;for(int i=0;i<n;i++) cin>>a[i];merge_sort(a,n,0,n);for(int i=0;i<n;i++) cout<<a[i]<<' ';
}
void merge_sort(int a[],int n,int left,int right)
{if(left<right){int mid=(left+right)>>1;merge_sort(a,n,left,mid);merge_sort(a,n,mid+1,right);merge(a+left,a+mid+1,a+mid+1,a+right,a+left);}
}

疯子的算法总结(六) 复杂排序算法 ① 归并排序 merge_sort()相关推荐

  1. 疯子的算法总结(六) 复杂排序算法 ② 桶排序

    从<基于比较的排序结构总结 >中我们知道:全依赖"比较"操作的排序算法时间复杂度的一个下界O(N*logN).但确实存在更快的算法.这些算法并不是不用"比较& ...

  2. 【Java数据结构与算法】第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍

    第六章 算法的时间复杂度.算法的空间复杂度和排序算法的介绍 文章目录 第六章 算法的时间复杂度.算法的空间复杂度和排序算法的介绍 一.算法的时间复杂度 1.时间频度 2.时间复杂度 3.常见的时间复杂 ...

  3. Algorithm:C++语言实现之内排序、外排序相关算法(插入排序 、锦标赛排序、归并排序)

    Algorithm:C++语言实现之内排序.外排序相关算法(插入排序 .锦标赛排序.归并排序) 目录 一.内排序 1.插入排序 2.锦标赛排序 3.归并排序 二.外排序 1.过程 一.内排序 1.插入 ...

  4. 排序算法 - 面试中的排序算法总结

    排序算法总结 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不 ...

  5. 机器学习(二十二)——推荐算法中的常用排序算法, Tri-training

    推荐算法中的常用排序算法 Pointwise方法 Pranking (NIPS 2002), OAP-BPM (EMCL 2003), Ranking with Large Margin Princi ...

  6. 基本算法研究1-冒泡排序算法测试

    基本算法研究1-冒泡排序算法测试 1.经典冒泡排序法基本原理 先看一个动态图,感觉比较形象: 冒泡排序(Bubble Sort)是一种简单的排序算法.默认是从小到大排序,即把最大的数据排在最后,相当于 ...

  7. 排序算法:简单选择排序算法实现及分析

    简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...

  8. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  9. 数据结构与算法:十大排序算法之插入排序

    数据结构与算法:十大排序算法之插入排序 package TopTenSortingAlgorithms;import java.util.Arrays; import java.util.Scanne ...

最新文章

  1. Visual Studio2015如何连接到windows azure(国内版本)
  2. python面试题及答案-Python面试题10道(附答案)看完面试不愁了
  3. python3使用serial以及pyserial包读取串口数据并解析字节数组,涉及数据移位以及Python无符号整数转为有符号整数操作
  4. Vs Code:Remote SSH
  5. E - Flow Gym - 102471E
  6. vue init失败解决方案-终极版
  7. 2017 Multi-University Training Contest - Team 5:1001. Rikka with Candies(手写bitset)
  8. 芯片介绍:CC2530
  9. linux 锐捷客户端 脚本,基于802.1x的锐捷linux客户端
  10. 【2019数学建模】国赛C题:机场出租车优化问题(原创)
  11. word2007打印在什么地方
  12. 在vue里使用codemirror
  13. html勾选标签,html怎么勾选框
  14. 深度学习计算模型中门函数的作用
  15. 操作系统——处理系统的分类
  16. 不愿意和别人打交道_一个人不愿意和同事打交道,大多是这3个原因,你了解吗...
  17. 《曾文正公嘉言钞》读书笔记
  18. 2022便利蜂4.14算法笔试题
  19. 视频教程-SpringBoot2+Vue+AntV前后端分离开发项目实战-Java
  20. 如何使用python生成词云并透明背景的词云?

热门文章

  1. HTML与CSS基础之否定伪类(四)
  2. android更新完之后怎么打开app,在Android中启动/更新后,检查App是否第一次打开
  3. iOS库--.a与.framework
  4. 8.基本数据结构-顺序表和链表
  5. 分享一下dudu回答的一个方法
  6. yum安装与源码编译安装实际使用区别
  7. fixed在微信下的BUG
  8. 探讨后端选型中不同语言及对应的Web框架
  9. spring boot之session store type is 'null'
  10. Android四大组件之——Activity的生命周期(图文详解)