一. 排列的逆序与逆序数
逆序: 取一个排列为标准排列, 其它排列中某两个元素的次序与标准排列中这两个元素的次序相反时,则称这两个元素构成一个逆序.逆序数: 一个排列中所有逆序总数叫做这个排列的逆序数. (注意是一个排列)
逆序数为偶数称为偶排列, 逆序数为奇数称为奇排列, 标准排列规定为偶排列.
通常取从小到大的排列为标准排列, 即 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;
}