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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序Python实现及其问题解答相关的知识,希望对你有一定的参考价值。

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实现及其问题解答的主要内容,如果未能解决你的问题,请参考以下文章

排序算法 | 快速排序(含C++/Python代码实现)

快速排序实现及其pivot的选取

快速排序-递归实现

九大排序算法及其实现- 插入.冒泡.选择.归并.快速.堆排序.计数.基数.桶排序

Java快速排序的非递归实现

快速排序实现 - Python