排序学习笔记
证明都是胡说八道。
一
一次操作只交换相邻两个数,使得排列有序的最小操作次数等于这个排列的逆序对数目。
证明:当排列有序时,不存在逆序对。
根据逆序对的定义,交换相邻两个数,只能增加或减少一个逆序对。因为这两个数与它们之外的数构成的逆序对数目不会变。所以为了使排列有序,最优操作是使逆序对数目不断减一。命题成立。
二
对序列 \((a_1,a_2,\cdots,a_n)\) 冒泡排序的最小操作次数等于 \(\max_{i=1}^n\{\sum_{j=1}^i[a_j>a_i]\}\)
其中一次操作为:
for(int i=1;i<n;i++){
if(a[i]>a[i+1])swap(a[i],a[i+1]);
}
证明:每进行一次操作,对于一个数 \(a_i\) 来说,都会使 \(\sum_{j=1}^i[a_j>a_i]\) 减少一(如果为零则不变)。这是由于 \(a_i\) 前面的最大的数一定会冒上去,而且一次只能冒一个。如果 \(a_i\) 被冒上去,显然前后都有 \(\sum_{j=1}^i[a_j>a_i]=0\)。综上,命题成立。

浙公网安备 33010602011771号