006---快速排序
快速排序
原理:
随机找一个基准数 ,暂且为第一个。把这个数拿出来。此时有个空位。然后从最右边开始找比他小的数。找到之后,把小的数放到空位上。然后从左边开始找比它大的数,放到空位上
li = [8, 3, 4, 7, 2, 5, 6, 9, 1]
li = [1, 3, 4, 7, 2, 5, 6, 9, ] 8
li = [1, 3, 4, 7, 2, 5, 6, ,9 ] 8
.
.
.
li = [1, 3, 4, 7, 2, 5, 6, 8,9 ] 8
几次之后 保证左边的数都比基准数小,右边的数都比基准数大
递归调用就可完成排序
1 li = [8, 3, 4, 7, 2, 5, 6, 9, 1] 2 3 def partition(li, left, right): 4 tmp = li[left] # 临时存放基准数 5 6 while left < right: 7 while left < right and li[right] >= tmp: # 右边找比tmp小的数 8 right -= 1 # 比基准数大 向左移动一位置 9 li[left] = li[right] # 找到之后 把数放到左边的空位上 10 11 while left < right and li[left] <= tmp: # 左边找比tmp大的数 12 left += 1 # 比基准数大,向右移动一位置 13 li[right] = li[left] # 找到之后。把数放到右边的空位上 14 15 li[left] = tmp # 当left 和right重合时,表示左边的数都比基准数小,右边的数都比基准数大,所以把基准数放到重合的位置上 16 return left 17 18 19 def quick_sort(li, left, right): 20 if left < right: 21 mid = partition(li, left, right) # 得到基准数最后的的索引 22 quick_sort(li, left, mid - 1) 23 quick_sort(li, mid + 1, right) 24 25 26 quick_sort(li, 0, len(li) - 1) 27 print(li)