快排边界条件的问题(《啊哈!算法》中的实现)

1、为什么要从基准数的另一边开始寻找(如果以左边第一个为基准数,则需要从右边开始寻找):
因为左边的哨兵停止的位置是大于基准值,或与右侧哨兵重合的位置。而右侧哨兵停所在的值一定大于等于基准值。在每次归位一个基准值的最后一步是将基准值与左侧哨兵替换,此时不能保证左侧哨兵所在位置的值小于基准值。
参考:https://blog.csdn.net/zcpvn/article/details/78150692

2、为什么从左/右开始扫描时,继续扫描的条件是大于等于/小于等于:
当遇到某个序列两端数值相等时,会出现 基准值 = 左哨兵值 = 右哨兵值 的情况。此时如果停止扫描(即边界条件为大于/小于),无论如何替换,数组中元素的值不发生变化。算法将陷入死循环
参考:https://blog.csdn.net/qq_41764621/article/details/82950936

你可能感兴趣的:(快排边界条件的问题(《啊哈!算法》中的实现))