归并排序求逆序对

2023-11-20

一、    归并排序原理

归并排序采用分治算法,将对整个数组排序的问题转化为合并两个有序子序列的问题。

.1:思想方法

以上是对数组进行排序的过程。

   首先,我们可认为,当区间长度为1时,每个区间都是有序的。

接着,我们合并这些长度为1的区间,得到了第二行数据,每个长度为2的区间都是有序的。

        如果我们继续合并,就可以得到长度为4的有序区间。

我们最终只需要进行Log2(N)次合并即刻完成排序。

一.2:合并有序区间的方法

首先,我们需要一个临时空间TEMP,我们将上一轮排序完的两个区域放入临时数组,注意左半边顺序放,右边倒着放。
        
下来我们开始合并操作

二、    代码[ pascal]

<pre name="code" class="delphi">program msort;
const
	maxn=100000000;
var
	i,j,k,n:longint;
	A,B,C:Array[0..maxn]of longint;
	procedure init;
	var
		i:longint;
	begin
                randomize;
		readln(n);
		for i:=1 to n do A[i]:=random(1000000);
	end;
	procedure msort(l,r:longint);
	var
		i,j,k,mid:longint;
	begin
		if l=r then begin
                        B[l]:=A[l];
                        exit;
                end;
		mid:=(l+r)div 2;
		msort(l,mid);
		msort(mid+1,r);
		for i:=l to mid do B[i]:=A[i];
                k:=r;
		for i:=mid+1 to r do begin
			B[i]:=A[k];
			dec(k);
		end;
		i:=l;j:=r;
		for k:=l to r do begin
			if B[i]<B[j]
				then begin
					A[k]:=B[i];
					inc(i)
				end
				else begin
					A[k]:=B[j];
					dec(j);
				end;
		end;
	end;

begin
	init;
	msort(1,n);
        for i:=1 to n do writeln(A[i]);
end.


 


三、    归并排序求逆序对
  



TEMP 25 37 48 57  82 75 29 18


这时刚才的一个临时数组,我们可以注意到,当右指针指的数字小于左指针的数字时候,他会比从左指针开始到中间的元素个数个逆序对。也就是MID-I+1个逆序对

为什么?因为左边是升序排列的。I右侧的元素只会比I大,所以假若TEMP[J]<I ,那TEMP[J]<TEMP[from i to mid]


因此只需要在源代码中加一行,即可完成任务


四、练习题。POJ罗楼

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

归并排序求逆序对 的相关文章

  • 为什么jmeter做压测叫做“并发”而不叫“并行”?

    昨天开测试方案评审会议 其中有一条性能测试需求为 测试100个用户同时进行查询 响应时间小于2s 方案中给出了100个用户并发操作的说明 关于 并发 二字 百思不得其解 首先 挖出脑袋里大学操作系统课堂上提到的概念 并发 在操作系统中 是指
  • Struts2常用的Ajax标签

    Struts2为了简化Ajax过程 提供了一些常用的Ajax标签 对于一些更复杂的Ajax通信过程 我们可以使用JSON插件来实现 1 div标签 div标签在页面上生成一个div元素 但这个div元素的内容不是静态内容 而是从服务器获取的
  • C#冒泡排序算法

    冒泡排序实现原理 冒泡排序是一种简单的排序算法 其原理如下 从待排序的数组的第一个元素开始 依次比较相邻的两个元素 如果前面的元素大于后面的元素 升序排序 则交换这两个元素的位置 使较大的元素 冒泡 到右侧 继续比较下一对相邻元素 重复步骤
  • FastJson 之 List<Map>转化成对应List<Object>

    List
  • pytorch分割网络数据输入接口

    pytorch的自定义接口是真的方便 记录一下自己分割数据输入的脚本 coding utf 8 Time 2019 10 31 21 36 Author Yunyun Xu Contact 1443563995 qq com File My
  • PTA(A)1074 Reversing Linked List (25point(s))(坑)

    思路 最后一个点是坑 可能存在孤立点 代码 include
  • vscode的Document This插件

    Document This插件 主要针对JavaScript 和 TypeScript 语言生成注释 光标放在函数名上 连续按 两下 Ctrl Alt D description param number x param number y
  • 【分库分表】sharding-jdbc—分片策略

    目录 StandardShardingStrategy ComplexShardingStrategy InlineShardingStrategy HintShardingStrategy NoneShardingStrategy 标准分
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • 线上问题排查----------ORG.APACHE.CATALINA.CONNECTOR.CLIENTABORTEXCEPTION: JAVA.IO.IOEXCEPTION: BROKEN PIPE

    今天公司技术支持的童鞋报告一个客户的服务不工作了 紧急求助 于是远程登陆上服务器排查问题 查看采集数据的tomcat日志 习惯性的先翻到日志的最后去查看有没有异常的打印 果然发现了好几种异常信息 但是最多还是这个 24 Nov 2016 0
  • Golang-使用 goroutine 运行闭包的“坑”

    介绍 在 Go 语言中 函数支持匿名函数 闭包就是一种特殊的匿名函数 它可以用于访问函数体外部的变量 需要注意的是 在 for range 中 使用 goroutine 执行闭包时 经常会掉 坑 因为匿名函数可以访问函数体外部的变量 而 f
  • 【Android】从零搭建组件化项目

    组件化系列文章介绍的内容稍微多了点 本着研究透这玩意的精神 从组件化的简介开始说起 目录 简介 组件化 模块化与插件化 开始 创建配置共享文件 打包模式配置 APT与JavaPoet 简介 什么是组件化 将多个功能模板拆分 重组的过程 为什
  • VM安装windows7 32位

    首先你电脑必须安装了 VMware 推荐版本 VMware12 或者 VMware 11 版本 然后你还需要一个系统镜像 可以通过下面链接下载 Win7 的镜像 复制链接 打开迅雷新建任务即可下载 Windows7 64位 ed2k fil
  • ubuntu换源为阿里云源

    切换目录到 etc apt 目录下 备份sources list文件 sudo cp sources list sources list bak 然后执行换源脚本 在当前路径下 sudo sources sh 脚本下载路径 http dow
  • BFS遍历树和DFS遍历树

    遍历树 按照遍历的顺序 如不清楚图的遍历 请先阅读图的遍历 绘制成树型结构 DFS遍历树 以下为图到遍历树的转化 如果不清楚图的遍历 请先阅读笔者的另一篇文章 图的遍历 动图 按照DFS遍历的顺序 绘制成一棵树 途中红色的边就是遍历过程中没
  • 软件测试题目

    一 判断题 每题2分 20 1 软件测试就是为了验证软件功能实现的是否正确 是否完成既定目标的活动 所以软件测试在软件工程的后期才开始具体的工作 初级 2 发现错误多的模块 残留在模块中的错误也多 初级 3 测试人员在测试过程中发现一处问题
  • Linux CentOS 7.5安装JDK1.8

    CentOS 7 5安装JDK1 8 Linux系统版本 CentOS 7 5 64位 下载JDK1 8 JDK 1 8官方下载地址 https www oracle com technetwork java javase download
  • tomcat 将详细日志写入mysql数据库

    http tomcat apache org tomcat 6 0 doc api org apache catalina valves JDBCAccessLogValve html conf server xml
  • 基础教学丨UiBot主界面、可视化、源代码视图操作

    基础教学丨UiBot主界面 可视化 源代码视图操作 今天主要讲解UiBot软件主界面 可视化视图 源代码视图的相关操作 目录 1 软件主界面操作 2 可视化视图操作 3 源代码视图操作 1 软件主界面操作 UiBot主界面布局如下 1 菜单
  • 【Java必修课】判断String是否包含子串的四种方法及性能对比

    1 简介 判断一个字符串是否包含某个特定子串是常见的场景 比如判断一篇文章是否包含敏感词汇 判断日志是否有ERROR信息等 本文将介绍四种方法并进行性能测试 2 四种方法 2 1 JDK原生方法String indexOf 在String的

随机推荐

  • QT画扇形和椭圆

    void MainWindow paintEvent QPaintEvent QPainter painter this painter setRenderHint QPainter Antialiasing true int radius
  • DTC status 为0x23的原因分析

    正常情况下dtc状态不可能出现0x23 当出现0x23可能是达芬奇中如下配置所致 1 PendingDtcProcessing设置为storeonly 此设置会导致没有分配快照空间的dtc无法set pending位 而且被displace
  • Python中的def函数

    概念 Python中的def语句用于定义一个函数 函数是一个代码块 它可以被重复调用 并且可以接收输入参数和返回值 在Python中 函数是由def关键字 函数名和圆括号内的参数列表组成的 场景 以下是几个函数使用场景的示例 阶乘计算 在计
  • Syntax Error: Error: Node Sass does not yet support your current environment...报错解决

    报错 Syntax Error Error Node Sass does not yet support your current environment Windows 64 bit with Unsupported runtime 93
  • Lambda表达式、std::function、和std::bind函数

    Lambda表达式 std function 和std bind函数 Lambda表达式 capture parameters mutable exception gt return type statement 1 capture 捕获外
  • Hook DirectInput->CreateDevice->GetDeviceData解决方案

    已解决 来人散分了 Hook DirectInput gt CreateDevice gt GetDeviceData 在一款使用DirectInput的3D游戏里面 通过Hook DirectInput8Create函数 CreateDe
  • 制作属于自己的个人博客-超详细教程

    SpringBoot个人博客 一 博客效果预览 博客首页预览 博客详情预览 博客评论区预览 博客底部栏预览 关于页面预览 二 博客效果在线预览 http blog ShaoxiongDu top 三 项目技术 后端SpringBoot框架
  • 基于神经网络实现数据自回归多变量预测及MATLAB实现代码

    基于神经网络实现数据自回归多变量预测及MATLAB实现代码 随着科技的不断发展 各种数据都被广泛应用到生产 生活中 而数据预测更是数据分析中重要的一环 在多变量预测领域 神经网络已经逐渐成为研究的热点之一 本文将介绍如何使用NARX NN实
  • 什么是高阶成分(HOC)?解释 React 中 render() 的目的?

    高阶成分 HOC 是一种基于React的组合特性而形成的设计模式 HOC是自定义组件 在其中包裹了另一个组件 他们可以接受任何动态提供的子组件 但不会修改或复制其输入组件中的任何行为 您可以说HOC是 纯 组件1 HOC通过对组件逻辑的重用
  • 目标检测和分类的评价指标

    准确率 Accuracy 混淆矩阵 Confusion Matrix 精确率 Precision 召回率 Recall 平均正确率 AP mean Average Precision mAP 交除并 IoU ROC AUC 非极大值抑制 N
  • 大数据工程师的日常工作是什么?要掌握哪些核心技术?

    很多人都听过大数据工程师 但却很少人知道他们是做什么的 下面就带大家一起来了解一下大数据工程师的日常 如果你对大数据感兴趣 下面的内容你一定要看看 大数据工程师是做什么的 分析历史 预测未来 优化选择 这是大数据工程师在 玩数据 时最重要的
  • npm run build源码是在哪里呢?

    npm run build 指令会执行 package json 中 scripts 字段的 build 脚本 这个脚本的代码可以在 package json 文件中的 scripts 字段内找到 例如 如果 package json 中的
  • gridlayout布局java_java Swing布局管理之GridLayout布局

    标签 GridLayout 类是一个布局处理器 它以矩形网格形式对容器的组件进行布置 容器被分成大小相等的矩形 一个矩形中放置一个组件 GridLayout网格布局特点 容器的空间划分成M N列的网格区域 每个区域只能放置一个组件 使容器中
  • JavaEE - 正则表达式、日期时间类、Math、Random、System、Runtime、大数值运算类

    一 正则表达式 用来描述或者匹配一系列符合某个语句规则的字符串 正则表达式定义了字符串的模式 可以用来搜索 编辑或处理文本 正则表达式是由普通字符 例如字符 a 到 z 以及特殊字符 称为 元字符 组成的文字模式 模式描述在搜索文本时要匹配
  • 蓝桥杯模拟、思维

    本文是根据博主安然无虞的文章进行我的思维训练和练习 下面是我的练习代码和思路 1 换酒问题 include
  • 人生就像一次旅行

    我很欣赏一个广告 特别是那句话 人生就像一次旅行 不必在乎目的地 在乎的是沿途的风景以及看风景的心情 人生怎样才能够真正做到如此的豁达 人生是一段旅程 在旅行中遇到的每一个人 每一件事与每一个美丽景色 都有可能成为一生中难忘的风景 一路走来
  • 不同数据库获取新增加的主键值

    不同数据库获取新增加的主键值 数据库 获取新增主键的查询语句 DB2 IDENTITY VAL LOCAL Informix SELECT dbinfo sqlca sqlerrd1 FROM table Sybase SELECT IDE
  • LeetCode刷题-4

    数组 35 搜索插入位置 题目描述 题目样例 Java方法 二分查找 思路及算法 代码 执行结果 复杂度 题目描述 给定一个排序数组和一个目标值 在数组中找到目标值 并返回其索引 如果目标值不存在于数组中 返回它将会被按顺序插入的位置 请必
  • MySQL 通配符学习小结

    原文 http blog csdn net ithomer article details 5130386 MySQL 通配符 SQL的模式匹配允许你使用 匹配任何单个字符 而 匹配任意数目字符 包括零个字符 在 MySQL中 SQL的模式
  • 归并排序求逆序对

    一 归并排序原理 归并排序采用分治算法 将对整个数组排序的问题转化为合并两个有序子序列的问题 一 1 思想方法 以上是对数组进行排序的过程 首先 我们可认为 当区间长度为1时 每个区间都是有序的 接着 我们合并这些长度为1的区间 得到了第二