码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-11 23:58:50      阅读:384      评论:0      收藏:0      [点我收藏+]

标签:alt   .com   16px   利用   color   实现   return   gpo   print   

实现思路

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

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

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

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

标签:alt   .com   16px   利用   color   实现   return   gpo   print   

原文地址:https://www.cnblogs.com/freedjango/p/8546934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!