4012: 计算逆序数
题目描述
给定n个互不相同的整数的序列a1, …, an。如果i<j且ai>aj,则称(ai,aj)是一个逆序。例如,5个数的序列
2, 4, 1, 3, 5
该序列中有3个逆序:(2, 1)、(4, 1)和(4, 3)。
设计一个分治算法计算一个序列中的逆序数。
输入
输入包括多组数据。每组数据有两行。每组数据的第一行是一个整数n(100 <= n <= 1000),n = 0意味着输入结束;第二行包含构成序列的n个整数。
输出
对每组测试数据,输出序列中的逆序数。
样例输入
5
2 4 1 3 5
7
2 7 1 4 5 3 9
0
样例输出
3
7
答案如下
#include<stdio.h>
int main()
{
int a[1010],i,j,k,n,t=0;
for(k=0;;k++)
{
scanf("%d",&n);
if(n==0)
break;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[j]<a[i])
t++;
}
}
printf("%d\n",t);
t=0;
}
return 0;
}