《算法导论》Problem 2-4 Inversions
在Merge Sort的基础上改改就好了。
public class Inversions {
public static int inversions(int [] A,int p, int r)
{
if(p<r)
{
int q = (int) Math.floor( (p+r)/2 );
int left = inversions(A,p,q);
int right = inversions(A,q+1,r);
int c = combine(A,p,q,r);
return left + right + c;
}
return 0;
}
public static int combine(int [] A, int p, int q, int r)
{
int total_inversions = 0;
int n1 = q-p+1;
int n2 = r-q;
int [] L = new int[n1];
int [] R = new int[n2];
for(int i=0; i<n1; i++)
L[i] = A[p+i];
for(int i=0; i<n2;i++)
R[i]=A[q+i+1];
int i=0;
int j=0;
int counter = p;
while(i<L.length && j<R.length)
{
if(L[i]<=R[j])
{
A[counter]=L[i];
i++;
}
else
{
A[counter]=R[j];
j++;
total_inversions += (q-(p+i)+1);
}
counter++;
}
if(i==L.length)
{
for(int k=j;k<R.length;k++)
A[counter++] = R[k];
}
else
{
for(int k=i;k<L.length;k++)
A[counter++] = L[k];
}
return total_inversions;
}
public static void main(String[] args) {
int A[] = {2,3,8,6,1,7,9,1};
int num_of_inversions = inversions(A,0,A.length-1);
System.out.println(num_of_inversions);
}
}
《算法导论》Problem 2-4 Inversions的更多相关文章
- 算法导论----VLSI芯片测试; n个手机中过半是好的,找出哪些是好手机
对于分治(Divide and Conquer)的题目,最重要是 1.如何将原问题分解为若干个子问题, 2.子问题中是所有的都需要求解,还是选择一部分子问题即可. 还有一点其实非常关键,但是往往会被忽 ...
- 2.1 insertion sort 《算法导论》答案
2.1 insertion sort <算法导论>答案 答案索引帖 2.1-1 Using Figure 2.2 as a model, illustrate the operation ...
- [Algorithm] 如何正确撸<算法导论>CLRS
其实算法本身不难,第一遍可以只看伪代码和算法思路.如果想进一步理解的话,第三章那些标记法是非常重要的,就算要花费大量时间才能理解,也不要马马虎虎略过.因为以后的每一章,讲完算法就是这样的分析,精通的话 ...
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 红黑树——算法导论(15)
1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...
- 基本数据结构(2)——算法导论(12)
1. 引言 这一篇博文主要介绍链表(linked list),指针和对象的实现,以及有根树的表示. 2. 链表(linked list) (1) 链表介绍 我们在上一篇中提过,栈与队 ...
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- quickSort算法导论版实现
本文主要实践一下算法导论上的快排算法,活动活动. 伪代码图来源于 http://www.cnblogs.com/dongkuo/p/4827281.html // imp the quicksort ...
- [算法导论]二叉查找树的实现 @ Python
<算法导论>第三版的BST(二叉查找树)的实现: class Tree: def __init__(self): self.root = None # Definition for a b ...
- 算法导论第十八章 B树
一.高级数据结构 本章以后到第21章(并查集)隶属于高级数据结构的内容.前面还留了两章:贪心算法和摊还分析,打算后面再来补充.之前的章节讨论的支持动态数据集上的操作,如查找.插入.删除等都是基于简单的 ...
随机推荐
- jquery_api(事件一)
一 .unload在火狐,谷歌无法弹出alerta是因为这两个浏览器默认组织alert弹出,unload事件可以进行一些对象销毁,事件解除绑定等清理工作. 如果你想在用户离开页面之前确认是否离开,最好 ...
- 报错:“不是有效的Win32应用程序”的解决办法
Win7.Win8下用VS2013编译完的程序,拿到32位WindowsXP虚拟机下运行有时候会报错:
- SVN分支的创建,合并,与销毁和相关操作
test是分支和主干所在的文件夹,SVNTest是主干,所有的分支都放在branch里面,192.168.1.101是服务器的地址 创建分支: 把服务器中的主干复制出来到自己的分支上: svn cop ...
- ArrayList遍历的同时删除--- 删除还是用迭代器的比较好,其它的都会有问题.
http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除-- 删除还是用迭代器的比较好,其它的都会有问题. 博客分类: 随笔 Javathread ...
- alt+shift+j,添加日期、作者等
在preference->Java->codestyle->codetemplates->commnets->type 可以编辑如: /** * @author ${us ...
- copy_part_stat.sql
spool 04_copy_part_stat.log conn / as sysdba execute sys.dbms_stats.export_schema_stats(ownname=> ...
- 简单查询plan
-> alter session set statistics_level=all; select /*+ gathe_plan_statistics */ * from ts.ts_recor ...
- ida调试 android so
C:\Documents and Settings\Administrator>adb shellshell@htc_v2_dtg:/ $ susushell@htc_v2_dtg:/ # cd ...
- Dubbo阿里Alibaba开源的分布式服务框架
[获奖公布]"我的2016"主题征文活动 程序猿全指南,让[移动开发]更简单! [观点]移动原生App开发和HTML 5开发,你更看好哪个? 博客的神秘功能 D ...
- UIScrollView 和 UIPageControl
UIScrollView [滚动视图]非常重要 UIScrollView是滚动视图,是其它带有滚动功能视图的父类, 本身不显示或者只显示背景,主要负责子视图的滚动和翻页. 一.常用属性 1.基本方法 ...