您的位置:首页 > 其它

排列逆序数和计算

2014-12-13 18:01 253 查看

一. 排列的逆序与逆序数

逆序: 取一个排列为标准排列, 其它排列中某两个元素的次序与标准排列中这两个元素的次序相反时,则称这两个元素构成一个逆序.

逆序数: 一个排列中所有逆序总数叫做这个排列的逆序数. (注意是一个排列)

逆序数为偶数称为偶排列, 逆序数为奇数称为奇排列, 标准排列规定为偶排列.

通常取从小到大的排列为标准排列, 即 1 ~ n的全排列中取123...(n - 1)n为标准排列.

例: 123全排列的逆序数

全排列	逆序数	逆序对
123		0							(排列123的逆序数为0)
132		1		32					(排列132的逆序数为1)
213		1		21					....
231		2		21, 31
312		2		31, 32
321		3		32, 31, 21

例: 1234全排列的逆序数

全排列	逆序数	逆序对
1 234
1 243			43
1 324			32
1 342			32, 42
1 423			42, 43
1 432			42, 43

2 134			21
2 143			21, 43
2 314			21, 31
2 341			21, 31, 41
2 413			21, 41, 43
2 431			21, 41, 43

3 124			31, 32
3 142			31, 32, 42
3 214			31, 32, 21
3 241			31, 32, 21, 41
3 412			31, 32, 41, 42
3 421			31, 32, 41, 42, 21

4 123			41, 42, 43
4 132			41, 42, 43, 32
4 213			41, 42, 43, 21
4 231			41, 42, 43, 21, 31
4 312			41, 42, 43, 31, 32
4 321			41, 42, 43, 32, 31, 21

http://www.tongji.edu.cn/~math/xxds/kcja/kcja_b/1-2.htm

二. 逆序数的计算

方法1: 直接遍历比较
int IinvertedSequence(char* pData, int nLen)
{
int nCount = 0;
int i, j;
for(i = 0; i < nLen; ++i)
{
for(j = i + 1; j < nLen; ++i)
{
if(pData[i] > pData[j])
{
++nCount;
}
}
}
return nCount;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  逆序 逆序数