排列逆序數和計算
一. 排列的逆序與逆序數
逆序: 取一個排列為標準排列, 其它排列中某兩個元素的次序與標準排列中這兩個元素的次序相反時,則稱這兩個元素構成一個逆序.逆序數: 一個排列中所有逆序總數叫做這個排列的逆序數. (注意是一個排列)
逆序數為偶數稱為偶排列, 逆序數為奇數稱為奇排列, 標準排列規定為偶排列.
通常取從小到大的排列為標準排列, 即 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;
}