对一个无序序列进行排序,要求一次只能交换相邻的两个数,那么最少需要交换多少次才可以完成排序呢?本问题假设序列所有数各不相同。
首先你需要了解一些概念:
- 逆序: 一般认为从左向右序列的数字增大认为是正序的,那么从左到右序列的序列数字出现减小就认为是逆序的。一个“逆序”的数学定义是这样的,如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则<A[i], A[j]> 这个有序对称为 A 的一个逆序,又称作一个逆序对。
- 逆序数: 整个序列中的逆序对的个数叫做序列的逆序数。
- 逆序列: 逆序列是表示序列逆序属性的一个序列,其定义是这样的,逆序列中的某一项aj表示原序列中的第二成分(右边成分<i, j>)为j的逆序对的个数。逆序列中的j需要从小到大正序排列,这样子组成的序列就叫作逆序列。显然,逆序列各项之和也是序列的逆序数。
下面我们来看一个例子:
原序列:4 8 2 7 5 6 1 3
逆序对:
(4,2), (4,1), (4, 3),
(8,2), (8,7), (8,5), (8,6), (8,1), (8,3),
(2,1),
(7,5), (7,6), (7,1), (7,3),
(5,1), (5,3),
(6,1), (6,3)
逆序数: 18
逆序数列:6 2 5 0 2 2 1 0
最小交换次数即为逆序数