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)

 

posted @ 2019-01-16 17:50  爬呀爬Xjm  阅读(135)  评论(0编辑  收藏  举报