欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-05 11:53:46
实现思路 将所需要的数字存入一个列表中 看下图你就明白了: 实现代码 快速排序比较冒泡排序效率要高得多~ ......

实现思路

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

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

看下图你就明白了:

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

实现代码

 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()

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