同步性的定义:
对两串不同的数字用同一算法进行排序时,如果该算法能够实现空间上的同步进行,就说这个算法具有同步性。
我们来说明一下冒泡排序的同步性:
在同一时间,冒泡排序算法在两串数字上的执行位置是一样的。
有趣的性质:
我们给出一个矩阵:
首先对每一列都进行排序:
然后在对每一行进行排序:
通过观察这个矩阵,我们发现,在对行的数字排序完后,列的数字的大小关系没有发生变化,下面我们就要来证明这个性质。
证明:
首先我们如果要证明这个性质,只需要证明两行满足这个性质就足够了,剩下的类比出来就行了。我们选定矩阵的前两行作为两个数字串,用冒泡排序对其横向进行排序,由于冒泡排序具有同步性,所以我们只对这两行(两个数字串)的一个局部进行观察,我们假设这个局部为:
首先确保了在纵向上是有序的,那么横向上总共有4种情况:
情况一和情况二:
这两种情况要么横向上都换,要么横向上都不换,很简单,一看就看出来,不需要证明
情况三:
此时只需要横向换下面的c和d就行了,为啥c和d换了之后在纵向上还是有序的呢?
通过b、d和c、d之间的关系我们可以得到c、b之间的关系如红箭头所示,通过a、b和b、d之间的关系我们可以得到a、d之间的关系如蓝箭头所示,则c、d交换后所得到的图如下所示:
在横向上数字交换后纵向上的数字还是有序的(a<d b<c),证毕。
情况四:
证法和情况三一样,这里就不重复。
至此,我们将所有的情况都证完了,这个性质也被我们证出来了。