原理
参考链接:
https://www.cnblogs.com/seniusen/p/9810080.html
http://wiki.jikexueyuan.com/project/easy-learn-algorithm/fast-sort.html
源码(c++)
快速排序算法
1 |
|
归并排序算法
1 |
|
注意点
快速排序算法中,为什么一定要从基数(枢纽)对面先开始?
假设对如下进行排序:

如上图,6在左,9在右
假设:我们将6作为基数
从左边开始(与正确程序执行顺序正好相反)
1 | while(i<j && a[i]<=pivot){ |
按照这个代码逻辑,走一遍,i会移动到 数字7 停下来 (此时因为 a[i]>pivot,循环退出),而接着 j 会也会移动到 数字7 停下来 (此时因为 i==j ,循环退出),然后执行 基数6 与 a[j] 的交换
交换后数组:{7,1,2,6,9}
此时明显与快速排序算法的核心思想不一致
问题在于当我们先从在边开始时,那么 i 所停留的那个位置肯定是大于基数6的
而在上述例子中,为了满足 i<j 于是 j也停留在7的位置,但最后交换回去的时候,7就到了左边
所以,我们必须从基准数的对面开始

