快速排序在于快,大概思想是:先使用一个数值作为中间值,通过第一次排序将数组分为两部分,左边的都比这个数值小, 右边的都比这个数值大,再利用递归将这两部分数组进行同样的排序:
1 def quick_sort(li, start, end):
2 # 递归结束条件:
3 if start >= end:
4 return
5 # 左边第一个索引
6 left = start
7 # 右边最后一个索引
8 right = end
9 # 把第一个数作为中间值
10 mid = li[left]
11 # 首先右边的索引往左移动,当left<right 的时候和right的值大于mid值时才执行循环
12 while left < right:
13 while left < right and li[right] >= mid:
14 right -= 1
15 li[left] = li[right]
16 while left < right and li[left] <= mid:
17 left += 1
18 li[right] = li[left]
19 li[left] = mid
20 # 此时,mid左边的数都小于mid, mid右边的数都大于mid
21 # 将两边的数再通过递归的方式进行排序
22 quick_sort(li, start, left - 1)
23 quick_sort(li, left + 1, end)
24
25
26 if __name__ == ‘__main__‘:
27 li = [4, 3, 5, 7, 9, 2, 1, 6, 8]
28 quick_sort(li, 0, len(li) - 1)
29 print(li)
萧伯纳说:“你有一个苹果,我有一个苹果,彼此交换一下,我们彼此仍然是各有一个苹果;但是你有一种思,我有一种思想,彼此交换一下,才发现从不同角度看到的问题远比本身更深刻,所以多交流多沟通是我们提高自我能力的一种方式!!!
如果你有更好更简单的方法,请一定评论谢谢!!!