1. 定义1
1.1 逆序和逆序数
- 对于n个不同的元素,
- 先规定各元素之间有一个标准次序(例如n个不同的自然数,可规定由小到大为标准次序),
- 于是在这n个元素的任一排列中,
- 当某两个元素的先后次序与标准次序不同时,就说有1个逆序;
- 一个排列中所有逆序的总数叫做这个排列的逆序数。
1.2 奇排列和偶排列
- 逆序数为奇数的排列叫做奇排列;
- 逆序数为偶数的排列叫做偶排列。
2. 举例
问题:求排列65132中的逆序数
解:在排列65132中:
6排在首位,逆序数为0;
5的前面比5大的数有1个(6),故逆序数为1;
1的前面比1大的数有3个,故逆序数为2;
3的前面比3大的数有2个,故逆序数为2;
2的前面比2大的数有3个,故逆序数为3;
于是这个排列的逆序数为:
t
=
0
+
1
+
2
+
2
+
3
=
8
t = 0 + 1 + 2 + 2 + 3 = 8
t=0+1+2+2+3=8.
3.C++代码实现
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sNum("65132");
int iInversionNum = 0;
for (int i = 0; i < sNum.size(); i++)
{
int s0 = sNum[i];
for (int j = 0; j < i; j++)
{
int s1 = sNum[j];
if (s0 < s1)
{
iInversionNum++;
}
}
}
cout << sNum << "的逆序数=" << iInversionNum << endl;
return 0;
}
同济大学数学系编. 工程数学 线性代数 第五版. 北京: 高等教育出版社 ↩︎