1. 程式人生 > 實用技巧 >Python 快速排序 思路詳細講解

Python 快速排序 思路詳細講解

思路:

  在這裡概念得話不在說。 大概的思路就是, 首先用列表的第一個元素和其他元素去比較

  小於當前元素得放到列表的左邊, 大於當前元素得放到列表得右邊。

  然後依次遞迴就可以了。  

  有人肯定遇到, 值覆蓋問該, 在這裡說一下。 重點就是mid = list1[0]

  也就是每一次他都會將傳入列表得第一個值賦值給一個變數, 這個時候

  就相當於在原列表留有一個空缺,而當列表得值進行list1[low]=list1[high]

  操作時, 首先就會將這個想要移動得值放到這個空缺中進行填補,那這樣

  就會多一個值, 也就是剛才得list1[high] ,那就是說這個值其實也就

  可以看成一個空缺位置, 等待下一次填補。 當最後得時候, 空缺得位置

  一定會在low 因為條件為 while low < high 即:不滿足則不再執行,所以

  最後再將mid 放到這個位置之後, 就不會出現為什麼值被覆蓋了,還是沒有

  改變原列表的現象。( 不懂得加qq, 註明來意即可。)

程式碼;

"""
author: zhao xian xin

不積跬步無以至千里

"""

""" 
1. 以第一個元素為基準, 將數字分為 小於放到左邊 大於放到右邊
"""
def kuaipai(list1,start,end):
    if start>=end:
        return
    low = start
    high 
= end mid = list1[low] print("start/low:", low, " ", "end/hight:",high," ", "mid:","mid") while low<high: while low<high and list1[high]>=mid: high-=1 list1[low]=list1[high] print(list1, "高變低") while low<high and list1[low]<mid: low
+=1 list1[high]=list1[low] print(list1, "低邊高") list1[low]=mid print(" ") print("-----------------------------") print(mid, "mid") print(list1, "list") print(start, low, end, "1111111111") print("-----------------------------") print(" ") kuaipai(list1,start,low-1) kuaipai(list1,low+1,end) if __name__ == '__main__': list1 = [8,7, 3, 6, 9, 10, 1] print(list1) print(" ") kuaipai(list1,0,len(list1)-1) print (list1)