快速排序,首先使用两个标示,指向数组第一个位置low和最后一个位置high,将第一个数用一个变量存储。
1、比较high指向的数8和第一个数5的大小8>5,high向左移动,high减1, 9>5, high继续减1, 2<5,将2放到low的位置,low加1,low指向7,7>5,将7放到high指向的位置上。
2、循环1的步骤,知道low=high,此时,将5放置到low或high的位置上,如第二张图所示,5左边的数都小于5, 5右边的数都大于5。
3、递归调用,便可实现排序
def partition(list, left, right):
tmp = list[left]
while(left < right):
while(left < right and list[right] >= tmp):
right = right - 1
list[left] = list[right]
while(left < right and list[left] <= tmp):
left = left + 1
list[right] = list[left]
list[left] = tmp
return left
def quick_sort(list, left, right):
if(left < right):
mid = partition(list, left, right)
quick_sort(list, left, mid-1)
quick_sort(list, mid+1, right)
return list
list = [5,4,7,6,3,2,8,9,1]
n = len(list)
r = quick_sort(list,0,n-1)
print(r)