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

基于STM32、HAL库的BMP585 气压传感器 驱动程序设计 define BMP585_I2C_ADDR_PRIMARY 0x76 << 1 /* 0x76地址左移一位 */#define BMP585_I2C_ADDR_SECONDARY 0x77 << 1 /* 0x77地址左移一位 *//* I2C句柄 *//* I2C地址 *//* 设置新的温度过采样率 *//* 设置新的滤波器系数 *//* 芯片ID *//* 清除温度过采样位 *//* 转换为hPa *//* 设置新的压力过采样率 *//* 设置新的电源模式 *//* 清除压力过采样位 */ 阅读详情

相关推荐

gdb对dwarf调试信息的解析和使用

gdb的对dwarf的调试信息的解析到使用的过程分析

JS072110的专栏 9567

逆序对

逆序对 设 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

Windows11+VS2022驱动开发环境搭建实战:从零到编译(避坑指南)

本文详细介绍了在Windows11系统下使用VS2022搭建驱动开发环境的完整流程,包括版本匹配、工具安装、环境配置及常见问题解决。重点强调了WDK与系统版本的严格匹配,以及VS2022中驱动开发组件的正确配置方法,帮助开发者高效避坑并成功编译第一个驱动程序。

weixin_29251337的博客 526

算法排序

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

qq_39369411的博客 145

基于IMX429-IMX430-IMX432-IMX437系列传感器的SLVS-MIPI桥接方案设计与实现

本文详细介绍了针对索尼IMX429、IMX430、IMX432及IMX437系列传感器的SLVS-MIPI桥接方案设计与实现。针对工业视觉、车载摄像头等应用中主流SoC仅支持MIPI接口的痛点,提出基于FPGA(如Lattice Crosslink-NX)的透传桥接方案,将传感器输出的SLVS信号无损转换为MIPI CSI-2信号,确保数据完整性与低延迟,并探讨了硬件选型、逻辑设计及多传感器兼容性等关键问题。

weixin_29230901的博客 460

机器学习——Anaconda下载安装教程

Anaconda详细下载安装教程

2401_83693485的博客 3065

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

python使用TensorRT报错,多线程或多进程中使用问题

python使用TensorRT报错,Cuda Runtime问题

qq_44224801的博客 747

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

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

lsy1889的博客 219

C# 8. 在新窗口中使用chart控件波形移动显示

1. 添加新窗口 在Form1中新建button控件,名称为buttonStartWaveDisp,这样单击就能调出Form2窗口 在Form1中增加如下: private void buttonStartWaveDisp_Click(object sender, EventArgs e) { if((form2 == null) || (form2.IsDisposed == true)) { form2 = new Form2();

TrueLink的博客 1432

HyperLynx(十八)DDR(一)DDR简介和DDR的数据仿真

LVTTL电平为单端信号,而SSTL电平本质上是差分对,其实现机制是将信号与参考电平Vref组成差分对进行比较,如图所示,VIH和VIL各有一个交流参数AC和直流参数DC,信号第一次越过AC门限的时刻,作为时序计算的参考点,此后只要信号保持DC门限内,逻辑状态保持不变,这种设计减小了噪声、振铃等对于信号质量的影响。经过调整后,控制器在发送颗粒1的DQS后,延时1ns再发送颗粒2的DQS,则颗粒1在1ns后收到对齐的DQS和CLK,颗粒2在2ns后收到对齐的DQS和CLK,从而满足了时序关系。

小幽余生不加糖 7676

求逆序数

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

jiyanfeng1的专栏 889

基于YOLOv10的建筑图纸物体检测系统:从数据集构建到UI界面实现

高度结构化的图形元素标准化的符号和标注系统多层次的细节表达精确的尺寸和位置关系。

YOLO 389

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

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

weixin_30484247的博客 166

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

P1966 [NOIP2013 提高组] 火柴排队

luogu P1966

weixin_58286631的博客 355

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

逆序数(牛客)

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

Ch714254994的博客 220

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

逆序对:从插入排序到归并排序

设A[1..n]是一个包含N个非负整数的数组。如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion)。 a)列出数组[2,3,8,6,1]的5个逆序。 b)如果数组的元素取自集合{1,2,...,n},那么,怎样的数组含有最多的逆序对?它包含多少个逆序对? c)插入排序的运行时间与输入数组中逆序对的数量之间有怎样的关系?说明你的理由。 d)给出一个算法,它能用O(nlo

Cyberspace 1601

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值