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

快速排序Python实现及其问题解答

时间:2016-10-14 23:50:41      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

1.基本的快速排序算法

技术分享
 1 def quick_sort(arry):
 2     return qsort(arry, 0, len(arry)-1)
 3 
 4 
 5 def qsort(arry, left, right):
 6     if left >= right:
 7         return arry
 8     key = arry[left]
 9     lp = left
10     rp = right
11     while lp < rp:
12         while arry[rp] >= key and lp < rp:
13             rp -= 1
14         while arry[lp] <= key and lp < rp:
15             lp += 1
16         arry[lp], arry[rp] = arry[rp], arry[lp]
17     arry[left], arry[lp] = arry[lp], arry[rp]
18     qsort(arry, left, lp-1)
19     qsort(arry, lp+1, right)
20     return arry
View Code

 

2.快速排序关于先比较右边再比较左边的解释

  首先,需要说明的是,这里的先比较右边再比较左边,是基于将比较基数定为左边left,如果定为右边right,那么就要先比较左边,其他地方没有想过,类似推导吧

  假设先比较左边,我们先来看一个简单的例子,例如 ls = [6, 1, 2, 7, 9],我们的算法中初始情况下 key = 6, left = 0, right = 4, lp = 0, rp = 4

 

1 while lp < rp:
2     while arry[lp] >= key and lp < rp:
3         lp += 1
4     while arry[rp] <= key and lp < rp:
5         lp -= 1
6     arry[lp], arry[rp] = arry[rp], arry[lp]
7 arry[left], arry[lp] = arry[lp], arry[rp]    

 

  那么在经过第一个while循环以后,lp为3,即 arry[lp]==7, 在进行第二个while循环时,因为要arry[4]>key,而且此时rp == 4, lp ==3,所以执行while循环体,所以rp==3,此时因为lp = rp,所以推出循环,交换arry[left], arry[lp] = arry[lp], arry[rp],所以此时列表变成了[7, 1, 2, 6, 9],显然不满足,小于arry[left](之前的,那个时候为6)的都在左边,大于它的都在右边,所以先比较左边不可行,总的来说,我们总是应该先从基数的对面开始比较。

快速排序Python实现及其问题解答

标签:

原文地址:http://www.cnblogs.com/Hwan/p/5962294.html

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