选择排序曾经是我的最爱,但自从认识了快速排序之后,咳咳…我依然坚持用选择排序…只是…感觉没有以前那么爱了…
如我上一篇博文写到的,选择排序的代码非常的简单,对于稍有一点代码经验的程序猿来说,30秒就能搞定一个选择排序算法。相比之下,快速排序的代码要复杂一些,但是其时间复杂度也更优一些。一般情况下,在待排序数组元素达到36个以上时,快速排序就比选择排序耗时更短了。
快速排序的平均时间复杂度是O(n*logn),但是在最糟糕的情况下,也即是待排序数组本身已经完全有序的情况下,快速排序的时间复杂度将达到O(n^2),这个时候快速排序算法的表现就不如选择排序了。咦?选择排序的时间复杂度不也是O(n^2)吗?为什么说快速排序在最糟糕的情况下,还比不过选择排序呢?——别忘了,快速排序需要一定的辅助存储空间,其空间复杂度是O(logn),而选择排序的空间复杂度是O(1),因此综合考量起来,在最糟糕的情况下,快速排序的确不如选择排序了呢!
唠叨了很多,现在来进一步介绍快速排序。
快速排序,简称“快排”,是一种不稳定的排序算法。我们以升序排序为例,其基本思想是:
1、在数组中选择一个基准值,将数组划分成两部分,要求左边的部分都比基准值小,右边的部分都比基准值大;
2、分别对左、右两部分执行第1步操作,直到无法再划分下去为止。
如果你有一定的编程基础,但之前又从未听说过快速排序,那么你现在应该会猜到:快速排序运用了分治思想,