逆序对定义:对一个序列a[n],若i<j且a[i]>a[j],则a[i]与a[j]为逆序对。
如:序列 3, 2, 1 的逆序对数为2+1=3。

# include <bits/stdc++.h>
using namespace std;TYPE array[ARRAYSIZE];  // 下标1~length
int length;  // array[]中使用的元素个数

注:以下各算法均会改变原序列

冒泡排序求解

逆序对数即冒泡排序中交换的次数。
平均时间复杂度:O(n^2)

int calc_BS(int a[], int n) {int cnt = 0; bool f = true;for (int i = 1; i < n; i ++) {for (int j = 1; j <= n-i; j ++) if (a[j] > a[j+1]) swap(a[j], a[j+1]), cnt ++, f = false;if (f) break;}return cnt;
}// main
int ans = calc_BS(array, length);

归并排序求解

递归对左右两半排序时,可把左右两半各自内部的逆序对数作为子问题计算。
平均时间复杂度:O(nlogn)

int t[ARRAYSIZE];  // 临时数组
int calc_MS(int a[], int l, int r) {if (l >= r) return 0;if (r - l == 1) { if (a[l] > a[r]) { swap(a[l], a[r]); return 1;}else return 0;}int cnt = 0, m = (l+r)>>1;cnt += calc(a, l, m) + calc(a, m+1, r);int p1 = l, p2 = m+1;for (int i = l; i <= r; i ++) {if (p1 > m) t[i] = a[p2 ++];else if (p2 <= r && a[p1] > a[p2]) t[i] = a[p2 ++], cnt += m+1 - p1;else t[i] = a[p1 ++];}for (int i = l; i <= r; i ++) a[i] = t[i];return cnt;
} // main
int ans = calc_MS(array, 1, length);

C/C++ 求逆序对数相关推荐

  1. POJ 1804 Brainman (归并排序 -- 求逆序对数)

    归并排序求逆序对数: 和归并排序一样,划分和递归求解都好理解,关键在于合并,对于右边的j ,统计出左边比j 大 的元素个数 f(j),所有的f(j)家和就是我们要的逆序对数! 在归并排序中,我们将右边 ...

  2. 数据结构实验 9.求逆序对数

    题目 [问题描述] 对于一个长度为N的整数序列A,满足i < j 且 Ai > Aj的数对(i,j)称为整数序列A的一个逆序. 请求出整数序列A的所有逆序对个数. [输入形式] 输入包含多 ...

  3. OPJ2018年算法课第二次作业:F.求逆序对数

    总时间限制: 500ms 内存限制: 65536kB 描述 对于一个长度为N的整数序列A,满足i < j 且 Ai > Aj.的数对(i,j)称为整数序列A的一个逆序 请求出整数序列A的所 ...

  4. poj:Freda的越野跑 求正序对数

    Freda报名参加了学校的越野跑.越野跑共有N人参加,在一条笔直的道路上进行.这N个人在起点处站成一列,相邻两个人之间保持一定的间距.比赛开始后,这N个人同时沿着道路向相同的方向跑去.换句话说,这N个 ...

  5. SDUSTOJ 1466 - 编写函数:递归求逆序 (Append Code)

    递归之美 Description 将输入的一个字符串s逆序输出. 编写函数recursive()完成程序: 原型:int recursive(); 功能:用递归的方法读取输入,并且逆序输出. 函数的调 ...

  6. 绝境求生(八数码有解无解的问题,求逆序)

    问题 E: [排序]绝境求生 时间限制: 1 Sec  内存限制: 64 MB 提交: 19  解决: 12 题目描述 The Eight Puzzle, among other sliding-ti ...

  7. hdu 4911 求逆序对数+树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=4911 给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少. 实际上每交换一次能且只能 ...

  8. -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...

    题目内容 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆 ...

  9. 用不同的姿势求逆序对(复习篇)

    用不同的姿势求逆序对(复习篇) 文章目录 用不同的姿势求逆序对(复习篇) 前言 讲解 归并排序 树状数组 线段树 题目 思路 代码 归并排序求逆序对 树状数组求逆序对 线段树求逆序对 历届试题 小朋友 ...

最新文章

  1. 一条消息是如何按照二进制协议写入到Batch中的ByteBuffer中的
  2. Math.ceil(),Math.floor()与Math.round()三个函数的定义。
  3. mysql内连接简写_技术分享 | MySQL 的 join_buffer_size 在内连接上的应用
  4. 40个良好用户界面Tips
  5. wpf首次项目开发技术总结wpf页面
  6. 1698 -Access denied for user 'root@xxxx'
  7. 西门子smartclient怎么用_Smart Client学习体会(一) Smart Client介绍
  8. python编程技术总结_大数据技术学习之Spark技术总结
  9. 京东购物车双11实战
  10. 没有工厂模式(工厂模式2)
  11. hfs文件服务器打开显示空白,解决Adobe Creative Cloud打开界面一直显示空白的方法...
  12. Failed to recurse into submodule path 'third_party/onnx'
  13. 解决ubuntu18.04听不到声音(很简单,不用每次开机都调)
  14. android自定义大转盘,Android使用surfaceView自定义抽奖大转盘
  15. 写好商业计划书,融资就成功了一半!
  16. linux删除tmp文件找回,如何在 Linux 下快速找到被删除的文件?
  17. indiegogo众筹
  18. 404页面该怎么做?
  19. Cortex-M3处理器内核与基于Cortex-M3的MCU关系
  20. centos 7-aarch64如何替换yum源

热门文章

  1. Dell 错误代码(供参考) 我试过报E1410 却是坏阵列卡 杯具
  2. 测试绝地求生显卡使用率软件,测试方法及平台细节:两套Core i7-8700K平台一起测...
  3. 美食节------菜谱详情
  4. 蚂蚁金服资深架构师解析Zeppelin不是飞艇
  5. BP神经网络语音训练
  6. Tp5中接口数组对象转数组方法
  7. 全国115所211高校名单一览表
  8. c语言浮点数值显示两位,C语言中,输出浮点数时保留两位小数应该怎么搞?
  9. 6.S081-6缺页异常 - lazy allocation - Page Fault
  10. 提供多种2D和3D图表类型以及组合图、仪表的图表控件CHARTING