python实现快速排序中的一些条件判断问题

先把代码写出来

def quick_sort(alist, start, end):
    if start >= end:
        return

    low_index = start
    high_index = end
    flag = alist[start]
    while high_index > low_index:	#1
        while alist[high_index] > flag:	#2
            high_index -= 1
        alist[low_index] = alist[high_index]
        while alist[low_index] < flag:	#3
            low_index += 1
        alist[high_index] = alist[low_index]
    alist[low_index] = flag
    quick_sort(alist, start, low_index-1)
    quick_sort(alist, low_index+1, end)


alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
quick_sort(alist, 0, len(alist)-1)
print(alist)

在第一遍尝试写代码的过程中在上述标注的#1的位置分别出现了一点小问题,现在整理如下:
#1 原本写的条件是high_index != low_index,原本考虑的是排序的最终结果是要确定中位数,也就是flag,的具体位置,在high_index和low_index两个游标相等的时候就可以确定了。但是在循环的过程中,会出现high_index和low_index相等的情况,如果此时又刚好满足#2或者是#3处的条件就会一直执行while下去。就会出现游标一直+=1或者-=1的操作。
这是DEBUG出来的情况在
在这里我们不难发现,此时high_index = low_index,所以while里面的+=1会执行,因此出现了high_index > low_index的情况这时候当再不满足的时候就会出现错误,因此上述代码中必须在#2和#3处再额外添加high_index > low_index的条件束缚,避免出现这种情况。
因为while只是进入循环的条件而不是确保循环过程中始终成立的保证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值