1 def func(li, left, right):
2 tmp = li[left]
3 while left < right:
4 while left < right and li[right] >= tmp: # 右边找比tmp小的数
5 right -= 1 # 比tmp大,right向左移动一位
6 li[left] = li[right] # 找到之后 右边的值写到左边空位上
7 while left < right and li[left] <= tmp: # 左边找比tmp大的数
8 left += 1 # 比tmp小,right向右移动一位
9 li[right] = li[left] # 找到之后 左边的值写到右边空位上
10 li[left] = tmp # 两个while一旦left与right碰头,也就是找到时候没有找到比自己大的数或者比自己小的数,跳出了循环,并且将tmp的值赋给left或right所在的索引
11 return left
12
13
14 li = [5, 7, 4, 6, 3, 1, 2, 9, 8]
15
16
17 def quick_sort(li, left, right):
18 if left < right:
19 mid = func(li, 0, len(li) - 1)
20 func(li, left, mid - 1)
21 func(li, mid + 1, right)
22
23
24 quick_sort(li, 0, len(li) - 1)
25 print(li)