天天看点

quickSort不稳定的验证方法

首先写出来一个快速排序的程序

然后创建一个布尔类型的变量,初始化为false,当被排序数组中相同的两个元素的位置发生了调换的时候,将这个布尔类型的变量置为true。

用什么办法来标记呢?又如何判断两个相同的元素的位置有没有发生调换呢?

我们知道被排序的数是用一个数组来容纳的。在排序的过程中,一定会使用交换这个方法,那么当发生交换事件的时候,我们就监听着,判断一下,这个发生交换的事件,有没有使用我们之前已经标记好的两个相同元素的索引,如果没有使用,则放过。如果使用了,我们就激发第二个功能,判断再交换完成之后,这两个相同元素的相对位置有没有发生改变呢?

又如何判断两个相同的元素的位置有没有发生调换呢?

之前已经提过了这个问题。我们知道既然要标记两个相同的元素在哪里?相对关系怎么样?有没有发生调换?鉴于我们要完成对以上三个问题的回答,我考虑使用一个数组,这个数组mark用来存储此时相同的元素在数组中的索引,而在每次对于相同元素的位置交换,都同时要更新到mark这个数组里面。每次更新都要进行一个检查,是否mark这里面的数还是按照一开始的从小到大的排列,如果是的话,说明是稳定的,如果出现了不是从小到大的排列的情况,说明出现了相同元素徒劳调换的现象,这个时候,就证明了这个排序算法是不稳定的。

至于代码实现,明天再补充,今天主要是想想思路。