实现思路
将所需要的数字存入一个列表中
- 首先,设置将最左侧的那个数设置为基准数,在列表中索引为0
- 然后设置两个移动位(用于比较),分别为最左边和最右边
- 然后最右边那位向左移寻找比基准数小的那一位,最右边那位则从左向右寻找比基准数大的那一位
- 再后,将找到的两位对应的数字替换,继续执行3,直到两个移动位相遇,把基准为替换到相遇的那一位
- 最后,将列表以基准数那一位一分为二切开,左边和右边部分继续执行上述1-4步,直到没有比较数为止(也就是一个数),排序完成。
看下图你就明白了:
实现代码
1 # coding: utf-8
2 # 快速排序,利用二分思想实现
3
4
5 def quick_sort(list, left, right):
6 if left > right:
7 return
8 temp = list[left]
9 i = left
10 j = right
11 while i != j:
12 # 先从右向左寻找
13 while list[j] >= temp and i < j:
14 j -= 1
15 # 再从左向右寻找
16 while list[i] <= temp and i < j:
17 i += 1
18 if i < j:
19 t = list[i]
20 list[i] = list[j]
21 list[j] = t
22 # 基准数替换
23 list[left] = list[i]
24 list[i] = temp
25 # 递归调用
26 quick_sort(list, left, i - 1)
27 quick_sort(list, i + 1, right)
28
29
30 while True:
31 list = []
32 try:
33 num = int(input('你想比较几个数?\n'))
34 except ValueError:
35 continue
36 for k in range(num):
37 a = int(input('请输入第' + str(k+1) + '个数:\n'))
38 list.append(a)
39 quick_sort(list, 0, num-1)
40 print('排序结果为:')
41 for l in range(len(list)):
42 print(list[l], end=' ')
43 print()
快速排序的时间复杂度为:O(NlogN),所以快速排序比较冒泡排序效率要高得多~