题目内容:
设a1, a2,…, an是集合{1, 2, …, n}的一个排列,如果i<j且ai>aj,则序偶(ai, aj)称为该排列的一个逆序。例如,2, 3, 1有两个逆序:(3, 1)和(2, 1)。设计算法统计给定排列中含有逆序的个数。
输入格式:
第一行输入集合中元素个数n,第二行输入n个集合元素
输出格式:
含有逆序的个数
输入样例:
3
2 3 1
输出样例:
2
#include <iostream>
using namespace std;
int find_reverse(int x[],int m,int n);
int main()
{
int n;
cin>>n;
int *a=new int[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
cout<<find_reverse(a,1,3);
delete[] a;
}
int find_reverse(int a[],int m,int n){
int sum=0;
int x=(n+m)/2;
if(n-m<1)
return 0;
for(int i=m-1;i<x;i++){
for(int j=x;j<n;j++){
if(a[i]>a[j])
sum++;
}
}
return sum+find_reverse(a,1,x)+find_reverse(a,x+1,n);
}