这几天在复习排序的知识,又到了快排这个地方
当时学习算法的时候,由于个人代码风格原因喜欢先处理i(左边开始),踩到了这个坑
时隔一年还记得这个坑,查了查网上说的感觉都不是那么容易理解
记一下 方便以后看
首先快排这个事不用说,两个哨兵,分别标记,然后交换,重点和坑在最后一步
也就是基准数(一般是数据中第一个数)和它本身所在的位置的数交换的时候会可能出现问题
我们快排的规则是小于基准数的数放左边,大于基准数的数放右边
然后是以这个基准数分界
但如果我们从左边开始,最后确定这个基准数位置的时候
要注意这个基准数本应该放的位置的目前的数(也就是要和基准数交换的数)一定是比基准数要小的
不然咋能被换到左边呢
而左边的哨兵先走,他不会标记比基准数小的数,他会错过应该交换的数继续向前走
反而还阻止了右边来的哨兵找到正确的位置,最后会找到一个比基准数大的数交换
这就会发生错误,这一轮的快排就失败了
而右边的哨兵先走就可以正确的找到位置了