快速排序思路:将元素一个个找到他们在队列中的位置
我们可以用一个中间变量a保存第一个元素,一开始,从最后一个元素与中国元素进行比较,如果大于a的值,我们将high向左移动一下,如果小于a,我们将a[low]=a[high],a再与比较右边的元素比较,如果小于,我们将low向右移动一格,如果大于a,说明该元素应该在元素的右边,我们将赋值a[high]=a[low]
当low<high的情况下,上述过程不断循环,找到第一个元素在队列中的位置
这时候以这个元素为中心,左边的元素全部小于它,左边元素全部大于它,分别对两边的队列进行上述同样的操作,我们可以使用递归的思想
但是这时候左边最后一个元素位置为low-1,而右边的起始值为low+1
所有函数将引入两个位置信息的变量
start,表示每次想要去排序的那个值
last,表示该部分的最后一个元素的位置
上面分为左右两部分
左边开始元素位置为start,最后一个元素位置为:low-1
右边的start=low+1,最后一个元素位置为:last
注意,这个递归的过程应该也属于函数的一部分,这还是在排序
整体代码如下:
def quick_sort(alist,start,last): a=alist[start]#一开始要排序的基准值 high=last low=start if start>=last: return while low<high: while low<high and alist[high]>=a: high=high-1 alist[low]=alist[high] while low<high and alist[low]<a: low=low+1 alist[high]=alist[low] alist[low]=a quick_sort(alist,start,low-1) quick_sort(alist,low+1,last) b=[55,66,22,33,99,105,630,55,99,66,5550,55] print(b) quick_sort(b,0,len(b)-1) print(b)
结果: