链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
比如一个元素个数为4的数列,其元素为2,4,3,1,则(2,1),(4,3),(4,1),(3,1)是逆序,逆序数是4
现在求给定数列的逆序数
输入描述:
第一行为N,表示数列的元素个数(N<=1000)
第二行为N个用空格隔开的整数,其值在int范围内
输出描述:
输出占一行,为逆序数的个数
示例1
输入
4 2 4 3 1
输出
4
思路:从头到尾遍历一遍,把后面比当前值小的全记录下来,称之为这个数的逆序数。
另外一种思路就是从尾到头,把前面比当前值大的记录下来
#include<stdio.h>
int main()
{
int n;
int a[10000];
scanf("%d",&n);
int temp;int t=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
temp=a[i];
for(int j=i;j<n;j++)
{
if(a[j]<temp)
{
t++;
}
}
}
printf("%d",t);
}