快速排序问题 python

请问各位大佬,划红线部分是什么意思,初始的low值是0,如果方便请用下面arr中的前两个数据给说明一下,运行过程,

非常感谢

快排是每次选一个基准(一般选最后一个),然后将大于基准的值放在基准后面,小于基准的值放在基准前面,再对基准值左右两侧,选基准,继续下去,直到排序完成。这里定义了两个函数,第一个partition函数完成选基准,将大于基准的挪到右侧,小于基准的挪到左侧,第二个quicksort函数是循环。

partition函数输入(列表,开始位置,结束位置),返回了基准的位置。

最简单的方法:如果某个值大于基准,可以将该值放到基准的位置上,后面的全部向前移动一位,例如[10, 7, 8, 9, 1, 5],基准为5,10大于5,那么将10放到5的位置,然后其余全部前移一位,即[7,8,9,1,5,10]->[8,9,1,5,7,10]->[9,1,5,8,7,10]->[1,5,9,8,7,10],这样就完成了一次,但这种方法要移动的次数有点多,因此就有了你程序的这种方法。

如果该值大于基准,那么就找小于基准的值进行交换,例如初始的i取值为-1,[10, 7, 8, 9, 1, 5],基准5,10大于5,那么就在后面找小于5的值进行交换,发现也就是1了,将1和10交换,此时你的 i 值加一变为0,交换完结果为[1,7,8,9,10,5],然后发现7大于基准5,在7的后面找小于基准的值,没找到,那么就将7和基准值5的位置进行交换,也就是[1,5,8,9,10,7],那么此时 i+1=1 ,i+1即是小于基准值的值的数量,也是这次排序完基准值的位置,这种方法只需要交换两次,比较简单。

我有一份c++的快速排序 堆排算法。建议参考。

已经发送私信。

初始值low为0

著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。

low也可以定义成其他形式。所以快排写得好,运行效率高。

第二条红线是两个数交换位置,low和i都是整数,作为列表的下标索引

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632