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