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)
邮箱: 1090055252@qq.com
原文地址:https://www.cnblogs.com/zhaoxianxin/p/13666152.html