思路:
在这里概念得话不在说。 大概的思路就是, 首先用列表的第一个元素和其他元素去比较
小于当前元素得放到列表的左边, 大于当前元素得放到列表得右边。
然后依次递归就可以了。
有人肯定遇到, 值覆盖问该, 在这里说一下。 重点就是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)