Python實現快速排序方法講解


快排思想

選取一個元素作為基准值(一般是選中數組中的第一個元素),將大於該基准值的元素放在數組的右邊,小於基准值的元素放在數組的左邊,此時完成一次排序,多次按照既定規則循環后完成排序。

詳細講解

  1. 優先設置兩個變量i和j,設置元素位置i=0,j=len(array)-1;
  2. 選取第一個元素作為基准值,即:base = array[i];
  3. j向左開始移動,每次移動一個元素,即j-=1,直到該元素小於基准值時停下,此時將該值賦值給array[i],即:array[i] = array[j];
  4. i向右開始移動,每次移動一個元素,即i+=1,直到該元素大於基准值時停下,此時將該值賦值給array[j],即:array[j] = array[i];
  5. 重復執行3/4兩個步驟,直到i=j時停下,此時即找到了基准值的位置,即:array[i] = base,目前也就完成了一次排序;
  6. 通過第一輪排序后得出前后兩個半區,則繼續遞歸執行前后兩半區實現最終排序。

代碼示例

def QuickSort(myList, start, end):
    # 判斷start是否小於end,如果為false,直接返回
    if start < end:
        i, j = start, end
        # 設置基准數
        base = myList[i]

        while i < j:
            # 如果列表后邊的數比基准數大或相等,則前移一位直到有比基准數小的數
            while (i < j) and (myList[j] >= base):
                j = j - 1

            # 如找到,則把第j個元素賦值給第i個元素
            myList[i] = myList[j]

            # 同樣的方式比較前半區
            while (i < j) and (myList[i] <= base):
                i = i + 1
            myList[j] = myList[i]
        # 做完第一輪比較之后,列表被分成了兩個半區,並且i=j,此時找到基准值
        myList[i] = base

        # 遞歸前后半區
        # print(base, myList)
        QuickSort(myList, start, i - 1)
        QuickSort(myList, j + 1, end)
    return myList


myList = [7, 6, 5, 3, 12, 20, 1, 9, 11, 4, 15, 10, 8]
print("myList:",QuickSort(myList, 0, len(myList) - 1))

運行結果:myList: [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 20]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM