Python 快速排序 思路詳細講解
阿新 • • 發佈:2020-09-14
思路:
在這裡概念得話不在說。 大概的思路就是, 首先用列表的第一個元素和其他元素去比較
小於當前元素得放到列表的左邊, 大於當前元素得放到列表得右邊。
然後依次遞迴就可以了。
有人肯定遇到, 值覆蓋問該, 在這裡說一下。 重點就是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)