归并排序同时计算逆序对数
来源:互联网 发布:vue删除数组中的对象 编辑:程序博客网 时间:2024/06/05 17:37
归并排序同时求逆序对数
c++11:
#include <iostream>#include <algorithm>#include <vector>#include <initializer_list>using namespace std;vector<int> v({5,4,3,2,7,6});int reverse_pairs=0;void merge(vector<int> &v, int start, int step, vector<int> &temp){const int n=v.size();int s1=start;int e1=start+step;int s2=e1;int e2= s2+step<n ? s2+step : n;int i=start;while(s1<e1&&s2<e2){if(v[s1]<=v[s2]){temp[i]=v[s1];--step;//复用step,用于计算逆序数++s1;}else{temp[i]=v[s2];reverse_pairs+=step;++s2;}++i;}if(s1<e1){copy(v.begin()+s1,v.begin()+e1,temp.begin()+i);}if(s2<e2){copy(v.begin()+s2,v.begin()+e2,temp.begin()+i);}}void msort(vector<int> &v){reverse_pairs=0;const int n=v.size();vector<int> temp(n); //临时空间int step=1;for(;step<n;step*=2){int i=0;for(;i<n-step;i+=2*step){merge(v,i,step,temp);}if(i<n)copy(v.begin()+i, v.end(), temp.begin()+i);swap(v,temp);}}int main() {for_each(v.begin(),v.end(),[&](int & x){cout<<x<<" ";});cout<<endl<<endl;msort(v);cout<<reverse_pairs<<endl;for(int x: v){cout<<x<<" ";}cout<<endl;}
scala (每次merge时计数)
object Main extends App {var reverse_pairs=0 //逆序数def msort[T](cmp:(T,T)=>Boolean)(l:List[T]):List[T]={def merge(l1:List[T],l2:List[T]):List[T] = (l1,l2) match{case(Nil,_) => l2case(_,Nil) => l1case(x::left1,y::left2) => if(cmp(x,y))x::merge(left1,l2) else{reverse_pairs+=l1.length //增加逆序数y::merge(l1,left2)}}val n=l.length/2if(n==0)return lelse{val (l1,l2)=l.splitAt(n)merge(msort(cmp)(l1),msort(cmp)(l2))}}println(msort((x:Int,y:Int)=>x<y)(List(5,4,3,2,7,6)))println(reverse_pairs)}
0 0
- 归并排序同时计算逆序对数
- hash一下 + 归并排序计算逆序对数
- 归并排序-逆序对数
- 归并排序求逆序对数)
- 归并排序&求逆序对数
- 归并排序求逆序对数
- 归并排序求逆序对数
- 归并排序及逆序对数
- 归并排序之逆序对数
- 归并排序求逆序对数
- 逆序对数(归并排序)
- 【java】归并排序 逆序对数
- 边归并排序,边统计逆序对数
- 归并排序 and 逆序对数(分治)
- 求逆序对数(利用归并排序)
- POJ 2299 归并排序 求逆序对数
- 归并排序算法求逆序对数
- 归并排序及利用归并排序求逆序对数
- Android学习路线(十七)支持不同设备——支持不同的语言
- 3gpp amr 源码 windows 下编译及使用
- poj--1061
- HDU 4939 Stupid Tower Defense(贪心+dp)
- SEO学习笔记(三)
- 归并排序同时计算逆序对数
- C# sqlserver
- C++ primer(第五版) 练习 7.9 个人 code
- 北方之星Java面试题
- 线段树
- 第4章 树 - 二叉搜索树数据结构实现
- SEO学习笔记(四)
- HDU 4941 Magical Forest(离散化)
- 栈之顺序栈