一维数组中的任意二元素交换最多只能将整个序列的逆序对数减少1

Posted tztqwq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一维数组中的任意二元素交换最多只能将整个序列的逆序对数减少1相关的知识,希望对你有一定的参考价值。

这是对的,值得思考,毕竟应用不是太少(所以要说服自己,用的时候更有底气)。

设一序列\(a_1,a_2,\cdots,a_n\),其中有\(a_i(1\leq i \leq n)\)

假设要通过交换\(a_i\)与某个数的位置来减少逆序对的数量。

交换的对象分这么几类:

1.\(a_i\)后面比\(a_i\)小的数

2.\(a_i\)后面比\(a_i\)大的数

3.\(a_i\)前面比\(a_i\)小的数

4.\(a_i\)前面比\(a_i\)大的数

假设交换的对象是\(a_j\)

前置说明(i-j之间不包括i、j)

第一种情况:
显然减少一个逆序对数

由于i,j被swap过,

\(a_i\)与且仅与\(i-j\)之间元素的相对位置发生改变,\(a_j\)同样。

那么逆序对数还要加上i-j之间比k大的数和i-j之间比j小的数,还要减上i-j之间比k小的数和i-j之间比j大的数。

到头来总逆序对数还是只减了1。

第二种情况:
显然增加一个逆序对数

由于i、j被swap过,同上,到头来逆序对数还是只加了1.

第三种情况:
同上,增加一个逆序对数

第四种情况:
同上,减少一个逆序对数。

以上是关于一维数组中的任意二元素交换最多只能将整个序列的逆序对数减少1的主要内容,如果未能解决你的问题,请参考以下文章

用C编程序将数组中的数据按逆序存放。

简单排序

如何用递归法将一个数组中的元素逆序输出???

python 怎么将一个数组逆序输出?

编写函数,返回在一个整数组中出现次数最多的数及其出现次数。

将数组3,7,1,6,2,4,8,5中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数。