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

Posted 自由的姜戈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法——python实现快速排序(二分法思想)相关的知识,希望对你有一定的参考价值。

实现思路

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

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

快速排序的时间复杂度为:O(NlogN),所以快速排序比较冒泡排序效率要高得多~

以上是关于算法——python实现快速排序(二分法思想)的主要内容,如果未能解决你的问题,请参考以下文章

算法之希尔排序快速排序二分查找

十大排序算法思想与 Python 实现 #私藏项目实操分享#

Unity中的快速排序算法&&二分查找

二分排序java实现

学习快速排序和二分查找算法

交换排序(冒泡排序快速排序的算法思想及代码实现)