快速排序的基准数如果从左开始,则左右哨兵索引要从右先出发,因为如果有10个数,基准数左右小于与大于基准数的有9个,但我们是从数组的第一位找的基准数,相当于基准数是占了一个左哨兵查找位,所以一定要从右哨兵开始查找,否则左哨兵会多找一次越过基准位
比如 6 10 9 8 7 5 4 3 2 1 如果6是基准位,则6的正确位置是在5的位置上
6 10 9 8 7 5 4 3 2 1
i j
>>>>
6 1 2 3 4 5 7 8 9 10
i j
>>>>
6 1 2 3 4 5 7 8 9 10
ij (定位错误)
如果我们让左哨兵索引i先出发,10-1换,9-2换,8-3换,7-4换,现在左右哨兵都到了6的正确位置左右,但是我们是让i先出发的,i哨兵会跳过5直接与j哨兵会师,导致错误
我们想一下,因为基准数占领了一个比基准数小的一个数的位置,所以当i哨兵和j哨兵最终换到基准数的正确位置的左右时候,一定会有一个小于基准位数字的数占领着基准数的位置,所以如果让左哨兵i先出发,则到最后一次一定是i哨兵先手,就会导致基准数定位错误,我们反过来想也是一样,基准数如果在右,则基准数会占领一个比基准数大的一个数的位置,则到最后定位基准数的时候,我们如果让右哨兵j先手,则也会导致定位错误的问题
然而如果左基准数右哨兵索引先手或右基准数左哨兵索引先手就不会有这个问题,因为占领基准数正确位置的数一定满足右哨兵或左哨兵停止巡航的条件
个人见解,如果有不准确还请大佬指正