求数组中的逆序对

原创 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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

统计数组中逆序对

POJ3067:Japan(树状数组求逆序对)

Description Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for...

求数组的逆序对

在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。 概括:如果a[i] > a[j] 且 i 分析: 方法1:暴力循环,时...

树状数组应用之——求逆序对

这里说的很好,把求逆序的步骤说的很明白,我也是看完才懂的,之前自己想了很久就是不明白为什么可以用树状数组求逆序    转载: 树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题....

面试经典(9)--求数组的逆序对

题目描述: 数组中如果前面一个数字大于后面的数字,则这俩个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。面试直接让写归并排序感觉有点傻,还是考察归并排序迁移能力的题目比较好。 算法分...

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

http://blog.csdn.net/seuliujiaguo/article/details/39555481 这是快排其他的应用 http://blog.csdn.net/seuliuji...

poj 2299 Ultra-QuickSort 求逆序对,树状数组和归并排序

//树状数组 #include #include using namespace std; int a[500050],c[500050],n; struct node { int num,i...

【poj2299】树状数组求逆序对 Ultra-QuickSort

Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 56754 ...

求数组逆序对数

题目: 对于一个元素个数为n的数组A,若*A[i] > A[j],且0 解析: 对于这一个题目,最容易想到的方法即顺序扫描整个数组。没扫描到一个元素,则将该元素与其后面的所有元素进行比较,若...

POJ 2299 树状数组求逆序对

题意 给定一组序列可转换相邻项的序列, 求让它排成非递减的最小操作数 题解 就是求序列逆序对数, 但是序列最大数据较大, 数组开不出来, 所以需要现进行离散化 比如 9, 1, 0, 5...
  • ADjky
  • ADjky
  • 2016-11-18 15:42
  • 133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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