little_smart 2021-05-21 09:49 采纳率: 100%
浏览 49
已采纳

快速排序问题 python

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

非常感谢

  • 写回答

4条回答 默认 最新

  • CSDN专家-kaily 2021-05-21 11:45
    关注

    快排是每次选一个基准(一般选最后一个),然后将大于基准的值放在基准后面,小于基准的值放在基准前面,再对基准值左右两侧,选基准,继续下去,直到排序完成。这里定义了两个函数,第一个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即是小于基准值的值的数量,也是这次排序完基准值的位置,这种方法只需要交换两次,比较简单。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路