演算法 4 快速排序

2022-02-24 15:35:52 字數 2070 閱讀 2298

從圖中我們可以看到:

left指標,right指標,base參照數。

其實思想是蠻簡單的,就是通過第一遍的遍歷(讓left和right指標重合)來找到陣列的切割點。

第一步:首先我們從陣列的left位置取出該數(20)作為基準(base)參照物。

第二步:從陣列的right位置向前找,一直找到比(base)小的數,

如果找到,將此數賦給left位置(也就是將10賦給20)

此時陣列為:10,40,50,10,60,

left和right指標分別為前後的10。

第三步:從陣列的left位置向後找,一直找到比(base)大的數,

如果找到,將此數賦給right的位置(也就是40賦給10),

此時陣列為:10,40,50,40,60,

left和right指標分別為前後的40。

第四步:重複「第二,第三「步驟,直到left和right指標重合,

最後將(base)插入到40的位置,

此時陣列值為: 10,20,50,40,60,至此完成一次排序。

第五步:此時20已經潛入到陣列的內部,20的左側一組數都比20小,20的右側作為一組數都比20大,

以20為切入點對左右兩邊數按照"第一,第二,第三,第四"步驟進行,最終快排大功告成。

right下標位置開始,向左邊遍歷,查詢不大於基準數的元素

5while left < right and nums[right] >=key:

6 right -= 1

7if left < right: #

找到小於準基數key的元素,然後交換nums[left],nums[right]

8 nums[left], nums[right] =nums[right], nums[left]

9else: #

left〉=right 跳出迴圈

10break11#

left下標位置開始,向右邊遍歷,查詢不小於基準數的元素

12while left < right and nums[left]

13 left += 1

14if left < right: #

找到比基準數大的元素,然後交換nums[left],nums[right]

15 nums[right],nums[left] =nums[left],nums[right]

16else: #

left〉=right 跳出迴圈

17break

18return left #

此時left==right 所以返回right也是可以的

1920

21def

quick_sort_standord(nums, left, right):

22if left

23 key_index =partion(nums, left, right)

24quick_sort_standord(nums, left, key_index)

25 quick_sort_standord(nums, key_index+1, right)

2627

28if

__name__ == '

__main__':

29 nums = [5, 6, 4, 2, 3, 1]

30print

(nums)

31 quick_sort_standord(nums, 0, len(nums)-1)

32print(nums)

4>

排序演算法4 快速排序

編寫乙份快速排序,完成對元素序列37,19,43,22,22,89,26,92按照從小到大順序排列。演算法思想 快速排序是氣泡排序演算法的改進,也屬於交換型別的排序演算法,它的基本思想描述如下 1 從第j個元素開始向前依次將每個元素與樞軸元素pivot比較。如果當前元素大於pivot,則比較前乙個元...

排序演算法 4 快速排序

快速排序法是對氣泡排序的一種改進,本來是要和氣泡排序寫在乙個文章裡的,不過前兩天剛開始在遞迴呼叫的時候沒有完全理解,昨天晚上google了一把發現原來自己理解錯了,我看的這個教材沒有寫清楚,今天早上除錯了一把終於成功。快速排序演算法的基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部...

排序演算法 4 快速排序

快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出來。快速排序...