天天看點

quickSort不穩定的驗證方法

首先寫出來一個快速排序的程式

然後建立一個布爾類型的變量,初始化為false,當被排序數組中相同的兩個元素的位置發生了調換的時候,将這個布爾類型的變量置為true。

用什麼辦法來标記呢?又如何判斷兩個相同的元素的位置有沒有發生調換呢?

我們知道被排序的數是用一個數組來容納的。在排序的過程中,一定會使用交換這個方法,那麼當發生交換事件的時候,我們就監聽着,判斷一下,這個發生交換的事件,有沒有使用我們之前已經标記好的兩個相同元素的索引,如果沒有使用,則放過。如果使用了,我們就激發第二個功能,判斷再交換完成之後,這兩個相同元素的相對位置有沒有發生改變呢?

又如何判斷兩個相同的元素的位置有沒有發生調換呢?

之前已經提過了這個問題。我們知道既然要标記兩個相同的元素在哪裡?相對關系怎麼樣?有沒有發生調換?鑒于我們要完成對以上三個問題的回答,我考慮使用一個數組,這個數組mark用來存儲此時相同的元素在數組中的索引,而在每次對于相同元素的位置交換,都同時要更新到mark這個數組裡面。每次更新都要進行一個檢查,是否mark這裡面的數還是按照一開始的從小到大的排列,如果是的話,說明是穩定的,如果出現了不是從小到大的排列的情況,說明出現了相同元素徒勞調換的現象,這個時候,就證明了這個排序算法是不穩定的。

至于代碼實作,明天再補充,今天主要是想想思路。