确定n个元素的任何排序中逆序对数量

题目2.给出一个算法,它能用O(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目 题目:         给出一个算法,它能用O(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目。 前提:         1.不考虑超大数据等特殊情况 代码:      #include using namespace std; int CountInverseNumber(int a[],int p,int r); int merge_sort(int a[],i 阅读详情

《算法导论》第三版 P24,2-4思考题

list1 = [10,9,8,7,6,5,4,3,1,2];
count = len(list1);

def mergeSort(list0, i, j):
    inversionNum = 0
    if i < j:
        k = (int)((i + j) / 2)
        inversionNum = inversionNum + mergeSort(list0, i, k)
        inversionNum = inversionNum + mergeSort(list0, k + 1, j)
        inversionNum = inversionNum + merge(list0, i, k, j)
    return inversionNum

def merge(list0, i, k, j):
    n1 = k - i + 1
    n2 = j - k
    subList1 = []
    subList2 = []
    positiveSequenceNum = 0
    inversionNum = 0
    for a in range(0, n1):
        subList1.append(list0[i + a])
    for a in range(0, n2):
        subList2.append(list0[k + 1 + a])
    m1 = 0;
    m2 = 0;
    tmp1 = 0;
    tmp2 = 0;
    for a in range(i, j + 1):
        if m1 < n1:
            tmp1 = subList1[m1]
        if m2 < n2:
            tmp2 = subList2[m2]
        if tmp1 > tmp2 and m2 < n2:
            list0[a] = tmp2
            inversionNum = inversionNum + n1 - positiveSequenceNum
            m2 = m2 + 1
        else:
            if m1 < n1:
                list0[a] = tmp1
                positiveSequenceNum = positiveSequenceNum + 1
                m1 = m1 + 1
    return inversionNum

print(mergeSort(list1, 0, count - 1));
print(list1);

这个算法是在归并排序算法的基础上改的。比较关键的一点是要清楚什么情况下是逆序及产生了多少逆序。

作者:李印臣,2005年毕业于山东师范大学计算机系,曾三次患有精神分裂症。康复后,做了近四年的软件工程师,然后做了两年精神分裂症领域的公益,现重新回到软件行业,一切从头再开始!
愿这个博客见证我的成长与进步。

告别外置天线!手把手教你用HFSS仿真设计一个20x40mm的433MHz PCB蛇形天线 本文详细介绍了如何使用HFSS仿真工具设计一个20x40mm的433MHz PCB蛇形天线,解决物联网设备小型化中的天线集成难题。通过对比外置天线与PCB天线的性能差异,深入解析蛇形天线的电磁学原理,并提供从建模到优化的全流程实战指南,帮助工程师实现高效、低成本的微型化天线设计。 阅读详情

相关推荐

西门子S7-1200 PLC控制步进电机实战:从I/O分配到梯形图,手把手教你实现正反转与调速

本文详细介绍了如何使用西门子S7-1200 PLC控制步进电机,从硬件接线到梯形图编程,实现正反转与三档调速功能。通过I/O分配、脉冲生成逻辑和方向控制等核心步骤,帮助工程师快速掌握PLC控制步进电机的关键技术,提升工业自动化项目的实施效率。

weixin_28733777的博客 535

逆序对

逆序对 设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。 如果存在正整数 i, j 使得 1 ≤ i A[j],则 这个有序对称为 A 的一个逆序对,也称作逆序数。 定义 对于一个包含N个非负整数的数组A[1..n],如果有i A[ j ],则称(A[ i] ,A[ j] )为数组A中的一个逆序对。 例如,数组(3,1,4,

walker lee 1396

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

算法排序

直接插入排序 基本思想: 直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。 代码实现: public static void insertionSort(int[] arr){ if(arr==null || arr.length<2) return; ...

qq_39369411的博客 145

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

火山引擎实时对话AI实战:5分钟搞定WebRTC+大模型+ASR/TTS全链路集成

本文详细介绍了如何利用火山引擎的实时对话AI解决方案,快速集成WebRTC、大模型、ASR和TTS服务,构建低延迟、高保真的实时语音对话应用。通过实战代码示例,从环境准备、音频流管理到全链路串联与性能优化,为开发者提供了一套端到端的集成指南,适用于智能客服、在线教育等互动场景。

weixin_29051245的博客 1128

788. 逆序对的数量

788. 逆序对的数量 给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数 n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式 输出一个整数,表示逆序对的个数。 数据范围 1≤n≤100000, 数列中的元素的取值范围 [1,109][1,109]。 输入样例: 6 2 3 4 5 6 1 输出样例: 5 代

GitHub:https://github.com/myp020301 264

Pytorch.nn.Linear 解析(数学角度)

pytorch.nn.Linear 是一个类,下面是它的一些初始化参数 in_features : 输入样本的张量大小 out_features : 输出样本的张量大小 bias : 偏置 它主要是对输入数据做一个线性变换。 y=xAT+b y=xA^T+b y=xAT+b 这里A是权重矩阵,b是偏置。他们都是根据 in_features 生成 测试代码: m = torch.nn.Linea...

Medlen 1万+

利用归并排序特性快速求解逆序对

利用归并排序的算法思想,实现了以nlogn复杂度求解逆序对的数量

lsy1889的博客 219

JavaFx 教程

JavaFx 教程

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 784

Python 爬虫实战:知网论文数据爬取(题录 / 摘要 / 引用提取 + Excel 结构化)

在学术研究中,获取准确且全面的文献数据是至关重要的。知网(CNKI)作为国内最大的学术文献数据库,拥有海量的论文资源。通过 Python 爬虫技术,我们可以高效地从知网爬取论文数据,包括题录、摘要和引用信息,并将这些数据结构化存储到 Excel 文件中,方便后续的学术分析和研究。

yansideyucsdn的博客 1748

求逆序数

求逆序数  在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。 现在,给你一个N个元素的序列,请你判断出它的逆序数是多少。比如 1 3 2 的逆序数就是1。 采用分治法+归并排序的思路:左表初始为[l,m]而右表为[m + 1, r],两个表各有一个指针i和j,因此在任意时刻左表为[i,m]而右表为[

jiyanfeng1的专栏 889

【报错解决】OpenClaw 报错 `openclaw: command not found`:全局命令未加入系统 PATH 的深度排查与修复指南

在国产AI工具链开发中,OpenClaw作为关键命令行工具常出现command not found报错。本文深度分析该问题的根源——Linux环境变量PATH未包含用户级安装目录(~/.local/bin)。通过四种解决方案(临时PATH修改、永久配置、软链接、虚拟环境处理)和排错Checklist,揭示"命令存在却找不到"的本质是路径配置问题,特别适用于Docker/国产Linux/非root环境。文中强调理解Linux工具链机制对国产AI开发的重要性,并指出这是开发者掌握环境

博客 5382

bzoj2058: [Usaco2010 Nov]Cow Photographs(逆序对)

题目大意:给出n个数的序列,每次可以交换相邻的两个数,问把序列变成编号i在编号i+1左边,编号1在编号n右边(一个环)最少需要多少步。如:35421最少交换两次变为34512。 一开始看到这题,只会O(n²),后来仔细想了一下,妙啊,妙不可言。 首先我们求出逆序对,即为这个序列变成升序排列的最小次数,问题就在于23451这类的怎么求了。突然,灵稽一动,我们只...

weixin_30484247的博客 166

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

P1966 [NOIP2013 提高组] 火柴排队

luogu P1966

weixin_58286631的博客 355

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

逆序数(牛客)

利用归并排序,以知,左右分别有序,所以逆序数res+=mid-p+1.给你n个数,求n个数的逆序数。

Ch714254994的博客 220

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Codeforces Round #485 (Div. 2) - E - Petr and Permutations

传送门:点击打开链接题意:给出一个1-n的随机排列,问这个序列是交换3*n次形成的,还是交换7*n+1次形成的。分析:首先,3*n和7*n+1的奇偶性一定不同,线性代数中学过,交换序列中任意两个元素,会使序列逆序对的奇偶性发生改变一次,所以只需快速求出逆序对就行。用归并、树状数组、线段树都行。另外负数取余,取余的结果与被取余的数保持一致,如果不确定正负,就先使用绝对值再取余。代码:#include...

常胜将军的博客 219

算法学习笔记----确定n个元素的任何排列中逆序对的数目

题目:设A[1...n]是一个包含n个不同数的数组。如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion)。给出一个算法,它能用Θ(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目。 解题思路:  ①比较直观的方法是循环从数组中取出一个元素k,然后从k之后的元素中找到比k小的元素个数,最后统计所有的个数即为排列中逆序对的数目。从数组中取元素的次数为n,每次

Justlinux2010的专栏 2507

浅谈排序算法之合并排序(4)续

笔者在上一篇博客中谈到了合并排序算法,其是分治思想的一种体现。在《算法导论》后的一道例题上,笔者看到了一道例题如下: 假设A[1…n]是一个由n个不同元素构成的数组。若i<j且A[i]>A[j],则对偶(i, j)称为数组A的一个逆序对。给出一个确定在n个元素的任何排列中逆序对数量的算法,最坏的情况是O(n * log(n))(提示,修改合并排序算法)。 首先,通过最简单方式,即双...

Lam Tang的博客 333

算法导论习题---求n个元素任何排列中逆序对的数量

问题描述:设A[1…n]是一个包含n个不同数的数组。如果在i < j的情况下,有A[i] > A[j],则(i,j)就称为A中的一个逆序对(inversion),(逆序对的元素是下标,而不是数组里的值)。给出一个算法,它能用Θ(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目。问题求解:方法一: 循环从数组中取出一个元素k,然后从k之后的元素中找到比k小的元素个数,最后统计所有的

爱橙子的OK绷的专栏 9807

38、【排序】逆序对的数量(C/C++版)

题目描述 给定一个长度为 n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。 输入格式: 第一行包含整数 n,表示数列的长度。 第二行包含 n个整数,表示整个数列。 输出格式: 输出一个整数,表示逆序对的个数。 数据范围: 1≤n≤100000 输入样例: 6 2 3 4 5 6 1 输出样例: 5 思路分析 利用“分治”的方式,将序列进行分解为LA和LB,则逆序

STAR GAME 2213

逆序对的数量+超快速排序+车厢重组

一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。如果 k > j > i 且 a[i] > a[j] > a[k],那么这里有两个含 a[i] 的逆序对,分别是 (a[i], a[j]) 和 (a[i], a[k]), a[i]是可以使用多次的。这么做的好处在于,如果序列是有序的,会让第三步计数很容易。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 ia[j],则其为一个逆序对;

心如冰清,天塌不惊 352

【归并排序】归并排序/逆序对的数量

acwing算法学习笔记

青竹雾色间.的博客 1431

专题 逆序对的求法

设,且有,则称这样的二元组为逆序对。下面讨论这种问题的求法。一维偏序问题主要就是这么两种解法都很优秀,后期本专题会填补与归并排序、树状数组的联系,目前还没有写出来,所以这只是一个初稿,后期会更加完善。当然,不影响阅读学习,都是笔者学习的体会,结合一些参考资料总结而出的。

2503_92193114的博客 1082

归并排序_逆序对的数量例题讲解

归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。归并排序与快速排序的一大区别是,归并排序先分治、再归并,而快速排序是先利用分界点交换数据,再分两段递归。

m0_52628295的博客 206
上一篇: 确定集合中是否存在两个其和刚好为X的元素?
下一篇: 分治策略求最大子数组
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值