三、快速排序
冒泡排序可以说是我们学习的第一个真正的排序算法,并且解决了桶排序浪费 空间的问题,
但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N ²) 。
假如我 们的计算机每秒钟可以运行10亿次,那么对 1 亿个数进行排序,桶排序只需要 0.1秒,
而冒 泡排序则需要1 千万秒,达到 115 天之久,是不是很吓人?
那有没有既不浪费空间又可以快 一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢?
示例:数组 {6, 1, 2, 7, 9, 3, 4, 5, 10, 8}
思路: 两端开始“探测”。先从 右往左找一个小于6 的数,再从左往右找一个大于6 的数,然后交换它们。
这里可以用两个 变量 i 和 j ,分别指向序列最左边和最右边。
我们为这两个变量起个好听的名字“哨兵 i ”和 “哨兵j”。
刚开始的时候让哨兵 i 指向序列的最左边(即 i =1),指向数字 6。让哨兵 j 指向序列的最右边(即j =10 ),指向数字 8 。