2015-03-03 37 views
1

我需要幫助瞭解快速排序算法的工作原理。我一直在觀看教學視頻,但仍然無法完全掌握它。快速排序算法狀態使用中間元素作爲支點

我有一個未排序的列表:1,2,9,5,6,4,7,8,3 而我必須快速排序它使用6作爲支點。 我需要在每個分區過程之後查看列表的狀態。

我的主要問題是理解元素的順序是什麼在樞軸之前和之後。所以在這種情況下,如果我們做了6個關鍵點,我知道數字1 - 5將在6和7 - 9之後。但是根據上面的列表,第一個分區中的數字1-5和7-9的順序是什麼?

這裏是我想使用的分區算法(熊我我使用中間元素作爲我最初的支點):

  1. 確定支點,並與第一個元素交換樞紐列表。

假設索引smallIndex指向最後一個小於主元的元素。索引smallIndex被初始化爲列表的第一個元素。

  • 對於列表中剩餘的元素(開始於第二元件) 如果當前元素比樞軸

    較小。增量smallIndex b。用由smallIndex指向的數組元素交換當前元素。

  • 使用smallIndex指向的數組元素交換第一個元素,即主元。

  • 如果任何人都可以在算法列表中發生的每一個小改動之後顯示列表,那將是了不起的。

    回答

    3

    沒關係。

    所有重要的事情 - 分區過程聲明的所有事情 - 是在運行後,中心點左側沒有出現大於樞軸的值,並且存在在右側沒有小於樞軸值的值。

    然後在後續的每一半的遞歸調用中處理兩個分區的內部順序。

    +0

    所以我可以安全地說,以6爲第一個分區作爲支點後,列表將是:1,2,5。4,3,6,9,7,8? – 2015-03-03 14:07:36

    +0

    這可能取決於你的具體實現,但通常我編寫代碼的方式,第一個交換將是9和3,這將把9放在最右邊的位置。 – 2015-03-03 14:16:35

    +0

    啊,所以它幾乎就像從右到左讀取值,如果它們應該移動到獲取位置的樞軸的另一側?如果是這種情況,我現在完全瞭解它......按照您通常對其進行編碼的方式,每個分區的外觀如何,直到列表完全排序爲止? – 2015-03-03 14:20:52