当前位置: 移动技术网 > IT编程>脚本编程>Python > 算法——python实现快速排序(二分法思想)

算法——python实现快速排序(二分法思想)

2018年03月12日  | 移动技术网IT编程  | 我要评论

残疾人日,2013好听的歌,51乐返网

实现思路

  将所需要的数字存入一个列表中

  1. 首先,设置将最左侧的那个数设置为基准数,在列表中索引为0
  2. 然后设置两个移动位(用于比较),分别为最左边和最右边
  3. 然后最右边那位向左移寻找比基准数小的那一位,最右边那位则从左向右寻找比基准数大的那一位
  4. 再后,将找到的两位对应的数字替换,继续执行3,直到两个移动位相遇,把基准为替换到相遇的那一位
  5. 最后,将列表以基准数那一位一分为二切开,左边和右边部分继续执行上述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()

快速排序比较冒泡排序效率要高得多~

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网