逆序对的数量 与 归并排序

news/2025/3/24 23:28:24/文章来源:https://www.cnblogs.com/qiuliw/p/18787792

题目描述

给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。

逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足i<j a[i]>a[j],则其为一个逆序对;否则不是。

输入格式

第一行包含整数 n,表示数列的长度。

第二行包含 n 个整数,表示整个数列。

输出格式

输出一个整数,表示逆序对的个数。

数据范围

1≤n≤100000
数列中的元素的取值范围 [1,109]

输入样例:

6
2 3 4 5 6 1

输出样例:

5


解题思路:在归并排序的基础上寻找逆序对;在每次合并之前,先计算逆序对数,左右两组数此时皆是从小到大的顺序排列。若左边第一个数大于右边第一个数,则左边剩下的数皆可和右边第一个数形成逆序对;此时继续看右边第二个数,比较左边第一个数和右边第二个数,以此类推。若左边第一个数小于右边第一个数,则比较左边第二个数和右边第一个数,如上述同样方式类推。

#include <iostream>using namespace std;const int N = 4;
int q[N],tmp[N];
int z = 0; // 逆序对个数
// 归并排序    类似后序遍历
void merge_sort(int q[],int left,int right){if(left>=right) return;int mid = (left + right) >> 1; // 确定分界点merge_sort(q,left,mid); // 左子数组排序merge_sort(q,mid+1,right); // 右子数组排序/*统计逆序对*/int i = left, j = mid +1 ; while (i<=mid){while (j<=right){if(q[i]<q[j]){z+=right-j+1;break;}j++;}i++;}/*执行合并*/// 合并两子数组到tmp,k是tmp的指针,i,j指向左/右子数组头部int k=0;i = left, j = mid +1 ; while(i<=mid && j <=right){if(q[i]<=q[j])tmp[k++]=q[i++];else tmp[k++]=q[j++];}// 复制没到头的偏大一坨while(i <= mid)tmp[k++]=q[i++];while(j <= right)tmp[k++]=q[j++];// 把合并后的tmp 复制到 原数组for(i=left,j=0;i<right;++i,++j)q[i]=tmp[j];
}int main(){for(int i=N-1;i>=0;--i){q[i]=i;}merge_sort(q,0,N-1);for(int i=0;i<N;++i){cout << q[i] << " ";cout << endl;}cout << z;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904182.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我最常用的 Visual Studio 2022 扩展插件推荐:生产力必备工具

Visual Studio 2022作为微软推出的一款功能强大的IDE,业界称之为“宇宙第一IDE”。它以出色的性能、丰富的内置功能和对多种编程语言的支持,深受开发者喜爱。然而,随着项目复杂度的增加和开发需求的多样化,仅依靠IDE的内置功能往往不足以满足所有场景。这时,扩展插件成为了…

25年可以免费使用的云服务器

免费服务器:调试程序与建站的好帮手网站链接为:https://www.sanfengyun.com/ 在数字化时代,无论是个人开发者、大学生还是时间充裕的技术爱好者,拥有一台稳定的服务器来调试程序和搭建网站都是至关重要的。而正是这样一个为广大用户提供了极大便利的平台,它以其免费的云服…

Code Runner MCP Server,来了!

大家好!我是韩老师。如果作为程序员的你,还不了解 MCP (Model Context Protocol) 的话,那韩老师劝你赶紧去补补课吧!本文不对 MCP 进行详细介绍~ 简单来说,MCP is another LSP in AI World! 也许有一天,AI 程序员不懂 MCP,就犹如前端程序员不懂 JavaScript!大家都知道韩…

Ollama初识

初识ollama,学习基本功能和记录参数前言 最近由于 deepseek 的火爆,AI 大语言模型又一次被抬了出来,对此早有关注的我决定尝试本地化部署使用体验一下,并且搭建一个本地的 AI 助手。 根据我之前了解到的信息,在使用大模型,现在较为方便的方法一般是先搭建一个大模型的管理…

Pass-15

function isImage($filename){//需要开启php_exif模块$image_type = exif_imagetype($filename);switch ($image_type) {case IMAGETYPE_GIF:return "gif";break;case IMAGETYPE_JPEG:return "jpg";break;case IMAGETYPE_PNG:return "png";break…

Pass-16

$is_upload = false; $msg = null; if (isset($_POST[submit])){// 获得上传文件的基本信息,文件名,类型,大小,临时文件路径$filename = $_FILES[upload_file][name];$filetype = $_FILES[upload_file][type];$tmpname = $_FILES[upload_file][tmp_name];$target_path=UPLO…

upload pass-01

直接上传一句话木马貌似不行,尝试抓包看看发现全是get请求抓不到post传参上传一句话木马的包,合理猜测是不是前段验证,F12禁用JavaScript验证试试看可以看到成功上传并且返回了图片使用phpinfo()命令发现一句话木马成功上传 同理,是不是我们上传一个图片(此时通过了前段白…

# 集美大学课程实验报告-实验3:栈和队列

集美大学课程实验报告-实验2:线性表项目名称 内容课程名称 数据结构班级 网安2411指导教师 郑如滨学生姓名 李斌财学号 202421336021实验项目名称 站和队列上机实践日期上机实践时间 2学时一、目的(本次实验所涉及并要求掌握的知识点) 掌握STL中栈和队列的基本存储结构 掌握…

L3 设计,开发,认证

我都想笑了之十万八千个视频需要看。L3 设计,开发,认证 这里我暂时跳过了那些PPT里面要求看的视频,过一会再整理。 利益相关者和需求 ​ 从图中我们可以得到如下信息:航空器的生命周期:设计——生产——认证——运营 原始设备制造商(original equipment manufacturer,OE…

KMP 入门

前传:BF 算法 BF 算法即为暴力解法,一位一位向下匹配。 时间复杂度约为 \(O(n \times m)\)。KMP KMP 算法的主要思想是利用部分匹配信息,避免重复匹配,提高字符串查找效率。 KMP 算法总时间复杂度是 \(O(n + m)\),匹配用时 \(O(n)\)。 \(m\) 为模式串长度,\(n\) 为目标串…

web-CodeInject

<?php#Author: h1xaerror_reporting(0); show_source(__FILE__);eval("var_dump((Object)$_POST[1]);");eval("var_dump((Object)$_POST[1]);");:这行代码使用了eval()函数,这是一个非常危险的函数,因为它会执行传递给它的字符串作为PHP代码。这意味…