求数组中的逆序对

原创 2015年11月19日 15:38:09
#include <iostream>
using namespace std;

int count = 0;

void merge(int *a,int p,int q,int r){
	int n1 = q-p+1;
	int n2 = r-q;
	int *m = new int[n1];
	int *n = new int[n2];
	for(int i=0;i<n1;i++) m[i] = a[p+i];
	for(int j=0;j<n2;j++) n[j] = a[q+j+1];
	int i=0,j=0,k=p;
	while(i<n1&&j<n2){
		if(m[i]<=n[j]) a[k++] = m[i++];
		else {
			int ni = q + 1 + j - k;
			count += ni;
			a[k++] = n[j++];
		}
	}
	while(i<n1) a[k++] = m[i++];
	while(j<n2) a[k++] = n[j++];
	delete[] m,n;
}
void mergeSort(int *a,int p,int r){
	if(p<r){
		int q = (p+r)/2;
		mergeSort(a,p,q);
		mergeSort(a,q+1,r);
		merge(a,p,q,r);
	}
}

int main(int argc, char** argv) {
	int a[10] = {9,8,7,6,5,4,3,2,1,0};
	mergeSort(a,0,9);
	for(int i=0;i<10;i++)
		cout<<a[i];
	cout<<endl<<count<<endl;
	return 0;
}

求逆序数对个数(微软2010年笔试题)

题目: 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序数对。一个排列中逆序的总数就称为这个排列的逆序数。如{2,4,3,1}中,2和1,4和3,4和...
  • bbewx
  • bbewx
  • 2014年04月22日 22:40
  • 1694

利用归并排序思想求数组中的逆序对

http://blog.csdn.net/seuliujiaguo/article/details/39555481 这是快排其他的应用 http://blog.csdn.net/seuliuji...
  • seuliujiaguo
  • seuliujiaguo
  • 2014年09月26日 10:07
  • 1064

经典算法——数组中的逆序对

一、题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 二、解题方法 利用归并排序的思想,...
  • geekmanong
  • geekmanong
  • 2016年03月18日 15:24
  • 4539

poj 3067(树状数组求逆序对)

题意:日本岛东海岸与西海岸分别有N和M个城市,现在修高速公路连接东西海岸的城市,求交点个数。 做法:记每条告诉公路为(x,y), 即东岸的第x个城市与西岸的第y个城市修一条路。当两条路有交点时,满足...
  • Weiguang_123
  • Weiguang_123
  • 2012年08月22日 14:50
  • 3483

[BZOJ2141]排队(分块+树状数组求逆序对)

最纯粹的孤独,总是出自大师之门。
  • Clove_unique
  • Clove_unique
  • 2016年04月01日 11:34
  • 600

【BZOJ3289】【莫队分块+树状数组求逆序对】Mato的文件管理

3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 1123  Solved: 495 [Submit][Statu...
  • snowy_smile
  • snowy_smile
  • 2015年10月29日 10:42
  • 393

HDOJ 题目3465 Life is a Line(树状数组求逆序对)

Life is a Line Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)...
  • yu_ch_sh
  • yu_ch_sh
  • 2014年12月17日 15:05
  • 444

WUST 1954 小朋友排队(树状数组+求两次逆序对)

n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。 如果某个...
  • qq_37497322
  • qq_37497322
  • 2017年08月02日 09:43
  • 160

POJ 3067 —— 树状数组求逆序对

Japan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17885   Accepte...
  • zkzxmzk
  • zkzxmzk
  • 2013年10月02日 16:22
  • 580

POJ 3067 Japan(树状数组求逆序对)

Japan http://poj.org/problem?id=3067 Time Limit: 1000MS Memory Limit: 65536K Descript...
  • synapse7
  • synapse7
  • 2013年07月27日 12:48
  • 1181
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求数组中的逆序对
举报原因:
原因补充:

(最多只允许输入30个字)