`
kmplayer
  • 浏览: 497205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

输出一个数列的逆序数

阅读更多
1,这个问题算法导论讲归并排序时,提到过。
找到一个实现代码,思路还是蛮清晰的。
核心:对于两个有序序列,找逆序对,遍历一次即可。

2,实现代码:
#include <iostream>
#include <cstring>
using namespace std ;

int inv(int data[], int  n)
{
    int left = (n >> 1);
    int right = n - left;
    int *tmp = new int[n];
    int ret = (right > 1? (inv(data, left) + inv(data + left, right)) : 0);
    int i = 0, j = 0;
    while (i < left)
    {
        while ((j < right) && ((i == left || data[i] > data[left + j]))) //核心,实质遍历一次即可
        //因为这个时候左右两边都是有序的
        {
            tmp[i + j] = data[left + j]; //这里由于逆序,存放后右边的
            j++; //有序的,所有后一个数的逆序数肯定大于前一个的
        }
        ret += j;
        tmp[i + j] = data[i]; //不是逆序,存放左边的   
        i++;
    }
    memcpy(data, tmp, sizeof(int) * n);
    delete[] tmp;
    return ret;
}

int main()
{
    int data[] = {5, 4, 3, 2, 1};
    cout << inv(data, sizeof(data)/sizeof(data[0])) << endl;
    return 0;
}
分享到:
评论

相关推荐

    python编程题+25个Python练习题及详细答案+巩固Python编程的基础知识+适合不同水平的Python开发者

    5. 写一个程序,判断一个数是否是回文数 6. 写一个程序,判断一个字符串是否是回文字符串 7. 写一个程序,生成一个随机数并将其逆序输出 8. 写一个程序,求两个数的最大公约数 9. 写一个程序,求两个数的最小公倍数 ...

    浙江大学C语言上机练习题附答案

    40027 从高位开始逐位输出一个整数的各位数字(选作) 39 40052 判断素数 40 40053 逆序输出整数 41 40054 输出斐波那契序列 42 第7周(M7) 42 50002 使用函数判断数的符号 42 50003 使用函数求奇数和 43 50005 使用...

    Java实验四-类和对象(Ⅰ).doc

    4. 编写一个类,可以判断一个数是否是水仙花数,另外写一个主类进行测试。(注:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:13 + 53+ 33 = 153)) 5. 编写一个类,可以判断一个数...

    C语言程序设计代码复习题大全.zip

    1.7 有一个数,内放10个数,不用全局变量求出最大值,最小值,和平均值。 1.8 用调用函数求最大公约数和最小公倍数。两个整数由键盘输入 1.9 写出一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息 ...

    蓝点被必做的算法经典题java.c/c++

    程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。  【程序15】  题目:打印出如下图案(菱形)  *  ***  ******  ********  ******  ***  * ...

    10个简单的java算法

    1.求n个数的最小公倍数。...给一个不多于5位的正整数,求是几位数,并逆序打印各个数字8.排序9.杨辉三角10.n个人围成圈,顺序排号,从第一个人开始报数,1-3,到3则退出圈子,问最后剩下的是第几号。

    java 经典习题.doc

    1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和...

    Python100道经典练习题,建议收藏.pdf

    建议收藏 ⽬录 实例001:数字组合 实例002:"个税计算" 实例003:完全平⽅数 实例004:这天第⼏天 实例005:三数排序 实例006:斐波那契数列 实例007:copy 实例008:九九乘法表 实例009:暂停⼀秒输出 实例010:给...

    JAVA作业——初学者遇到的java编程题目

    2.一个数如果恰好等于他的因子之和,这个数就称为“完数”,例如6=1+2+3。编程 找出1000以内的所有完数 3.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求他在第10次落地时,共经过多少米?第10...

    C语言经典例题100道

    将一个数组逆序输出 41.static定义静态变量用法 42.使用auto定义变量用法 43.使用static的另一用法 44.使用external的用法 45.使用register定义变量方法 46.宏#define命令练习(1) 47.宏#define命令练习(2) 48.宏#...

    《剑指Offer》题目及代码.zip

    22. 判断一个栈是否是另一个栈的弹出序列 23. 层序遍历二叉树 24. 后序遍历二叉搜索树 25. 二叉树中和为某值的路径 26. 复杂链表的复制 27. 二叉搜索树转换为双向链表 28. 打印字符串中所有字符的排列 29. ...

    python100例.zip

    实例040:逆序列表 实例041:类的方法与变量 实例042:变量作用域 实例043:作用域、类的方法与变量 实例044:矩阵相加 实例045:求和 实例046:打破循环 实例047:函数交换变量 实例048:...

    c语言经典案例

    实例104 判断一个数是否存在数组中 135 实例105 求二维数组对角线之和 136 实例106 模拟比赛打分 137 实例107 矩阵的转置 139 实例108 设计魔方阵 141 实例109 字符升序排列 142 实例110 在指定位置插入字符 144 ...

    python简单程序编写.zip

    python简单程序编写 ...1052: 经典逆序对问题 40 1031: 小型登陆系统 41 1035: ICPC式家长 43 1053: 跟奥巴马一起画方块 44 1065: 求约数之和 45 1063: 输出Python 46 1058: Cut Integer 47 1057: 查找“支撑数” 49

    世界500强面试题.pdf

    1.3.9. 左移递减数列查找某一个数................................................................ 60 1.3.10. 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相 邻(上下左右)某一个元素也...

    最新JAVA编程题全集_50题及答案

    程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=...

    leetcode答案-LeetCode:LeetCode答题代码

    给定一个整数数列,找出其中和为特定值的那两个数。 你可以假设每个输入都只会有一种答案,同样的元素不能被重用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0,...

    Visual C++开发实战1200例 第3章

    实例105输出二维数组任一行任一列值 实例106使用指针查找数列中的最大值和最小值 实例107用指针数组构造字符串数组 实例108将若干字符串按照字母顺序输出 实例109用指向函数的指针比较大小 实例110用指针函数实现求...

    C程序范例宝典(基础代码详解)

    实例005 3个数由小到大排序 6 实例006 a2+b2 8 实例007 整倍数 9 实例008 判断闰年 10 实例009 阶梯问题 11 实例010 评定成绩 12 实例011 整数加减法练习 13 实例012 模拟ATM机界面程序 14 1.3 ...

    cfcc-main.zip

    9.c //实现求字符个数 10.c //求单词个数 xiao1 11.c //实现密码验证 12.c //实现str算法 13.c //折半法找数 14.c //递归汉诺 15.c //选择法排序 16.c //局部变量的生存期 17.c //全局变量的作用域 18.c //神奇的 i+...

Global site tag (gtag.js) - Google Analytics