排列逆序数和计算

来源:互联网 发布:电信光纤网络优化大师 编辑:程序博客网 时间:2024/05/29 13:05

一. 排列的逆序与逆序数

逆序: 取一个排列为标准排列, 其它排列中某两个元素的次序与标准排列中这两个元素的次序相反时,则称这两个元素构成一个逆序.
逆序数: 一个排列中所有逆序总数叫做这个排列的逆序数. (注意是一个排列)
逆序数为偶数称为偶排列, 逆序数为奇数称为奇排列, 标准排列规定为偶排列.


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

例: 123全排列的逆序数全排列逆序数逆序对 1230(排列123的逆序数为0)132132(排列132的逆序数为1)213121....231221, 31312231, 32321332, 31, 21例: 1234全排列的逆序数全排列逆序数逆序对1 2341 243431 324321 34232, 421 42342, 431 43242, 432 134212 14321, 432 31421, 312 34121, 31, 412 41321, 41, 432 43121, 41, 433 12431, 323 14231, 32, 423 21431, 32, 213 24131, 32, 21, 413 41231, 32, 41, 423 42131, 32, 41, 42, 214 12341, 42, 434 13241, 42, 43, 324 21341, 42, 43, 214 23141, 42, 43, 21, 314 31241, 42, 43, 31, 324 32141, 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;}



0 0
原创粉丝点击