将区间递归分解,直到区间只有2个元素,然后比较大小,排序,等递归回来的时候就将排序好的子区间再排序合并....一直排序合并,最后就排序完成了。

(可以做范围大的逆序数的题)

#include <cstdio>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <algorithm> #define sf scanf
#define pf printf
#define fp(x) freopen((x), "r", stdin) typedef long long ll; using namespace std; void pri1(int arr[], int start, int end)
{
while (start<=end) pf("%d ", arr[start++]);
pf("\n");
} void pri2(int **arr, int start1, int end1, int start2, int end2)
{
for (int i=start1; i<=end1; i++) {
for (int j=start2; j<=end2; ++j) {
pf("%d ", arr[i][j]);
}
pf("\n");
}
} void merge(int arr[], int left, int right, int tarr[])
{
if (left>=right) return ;
int m = (left+right) >> ;
merge(arr, left, m, tarr);
merge(arr, m+, right, tarr);
int i,j, cnt;
i = left;
j = m+;
cnt = ;
while (i<=m && j<=right) {
if (arr[i] <= arr[j])
tarr[cnt++] = arr[i++];
else
tarr[cnt++] = arr[j++];
}
while (i<=m) tarr[cnt++] = arr[i++];
while (j<=right) tarr[cnt++] = arr[j++];
for (i=; i<cnt; ++i) arr[left++] = tarr[i];
} void mergesort(int arr[], int left, int right) //区间 [a,b]
{
int *p = new int[right-left+]; //这样就不用频繁的申请内存了。 用来保存中间的排序结果。
merge(arr, left, right, p);
} int main()
{
// int arr[] = {1, 8, 11, 5, 9, 2, 4, 6, 77, 111};
// int arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
// int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// int arr[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
// int arr[] = {1, 2, 1, 2, 1, 1, 1, 1, 1, 1};
// int arr[] = {1, 2, 1, 1, 1, 1, 1, 1, 1, 1}; mergesort(arr, , );
pri1(arr, , ); return ;
}

归并排序merge_sort的更多相关文章

  1. 疯子的算法总结(六) 复杂排序算法 ① 归并排序 merge_sort()

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

  2. 归并排序(Merge_Sort)

    基本思想 建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 算法原理 归并操作指的是将两个已经排序的序列合并成一个序列的操作,归并 ...

  3. 【Algorithm】自顶向下的归并排序

    一. 算法描述 自顶向下的归并排序:采用分治法进行自顶向下的程序设计方式,分治法的核心思想就是分解.求解.合并. 先将长度为N的无序序列分割平均分割为两段 然后分别对前半段进行归并排序.后半段进行归并 ...

  4. Open Data Structure Templates

    数据结构模板 Chen 2016/12/22 前言 本篇博客的模板,全部是我纯手打的,如果有发现错误,请在下方留言指正:).欢迎大家参考. 有一些地方还不是很完善,等过一阵子用C++实现和部分重构下. ...

  5. 给一已经排序数组A和x,求A中是否包含两个元素之和为x

    亲爱的大神老爷们,这是小渣第一次写blog,欢迎大家来喷(批评指正),算法渣因为面试中连这道题都不会写就自己琢磨了一下,也参考了网上大家的做法 解法一: 思路:从首尾向目的靠拢,因为已经排序,[假设存 ...

  6. JAVA:数组,排序,查找<4>

    一.数组 1.一维数组 (1).数组的定义 数据类型 数组名[]=new 数据类型[大小] public class Demo1 { public static void main(String[] ...

  7. Java学习第四篇:数组,排序,查找

    一.数组 1.一维数组 (1).数组的定义 数据类型 数组名[]=new 数据类型[大小] public class Demo1 { public static void main(String[] ...

  8. ###Maintainable C++

    点击查看Evernote原文. #@author: gr #@date: 2014-08-15 #@email: forgerui@gmail.com 记录一些标准规范.让自己的编码更可读,更可维护. ...

  9. MERGE_SORT归并排序C++实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下实现归并排序,第一部分含有哨兵(算法来自<算法导论>),第二部分不含哨兵 第一部分 ...

随机推荐

  1. ORM框架之SQLALchemy

    一.面向对象应用场景: 1.函数有共同参数,解决参数不断重用: 2.模板(约束同一类事物的,属性和行为) 3.函数编程和面向对象区别: 面向对象:数据和逻辑组合在一起:函数编程:数据和逻辑不能组合在一 ...

  2. 从此web开发so easy!

    ECharts (Enterprise Charts 商业产品图表库) 基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图 ...

  3. js 获取数组重复的元素

    //获取数组重复的元素 function refrain(arr) { var tmp = []; if(Array.isArray(arr)) { arr.concat().sort().sort( ...

  4. id: cannot find name for user ID xxx处理办法

    一.现像 root用户登录显示正常但以普通用户登录时报类似如下错误: id: cannot find name for user ID 500id: cannot find name for grou ...

  5. 默认五笔输入法qq

    默认五笔输入法   1● 五笔设置   2● 语言设置     Success  

  6. CAD绘制室外台阶步骤5.4

    1.在CAD的平面上用PL命令绘制台阶,如图: 绘制好了之后.进入三维模型,“工具""移位”选择台阶,回车,"Z"回车,输入数值“-450”如图 2.输入命令“ ...

  7. 尚学堂java答案解析 第二章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题: 1.CD 解析:A public是关键字. B 第一个不能是数字 2.C 解析:j=i++  < ...

  8. unity中让物体移动到鼠标点击地面任一点的位置(单击移动和双击暂停移动)并生成图标

    using UnityEngine; using System.Collections.Generic; using UnityEngine.EventSystems; using UnityEngi ...

  9. OOP ⑴

    1.面向对象 类和对象的关系 类是我们在生活中,对身边的一系列事物,进行的不自觉的分类! 只是脑海中的一个印象! 在现实生活中,不存在! 存在的是我们这个印象的具体反映! 对象:用来描述客观事物的一个 ...

  10. AVL平衡二叉树实现,图解分析,C++描述,完整可执行代码

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...