请问各位大佬,划红线部分是什么意思,初始的low值是0,如果方便请用下面arr中的前两个数据给说明一下,运行过程,
非常感谢
请问各位大佬,划红线部分是什么意思,初始的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即是小于基准值的值的数量,也是这次排序完基准值的位置,这种方法只需要交换两次,比较简单。