快速排序
快速排序(Quicksort) 是一种排序算法,平均时间复杂度为:O(n log n),最坏需要 O(n²),但很少见,快速排序之所以叫快速排序,就是因为它比一般的排序算法要快。
快速排序使用了分而治之的思想,步骤如下:
- 选择基准值(pivot)
- 将数组分成两个子数组:小于基准值的元素和大于基准值的元素
- 对这两个子数组进行快速排序
不同的选取基数值策略对排序性能都有很大的影响。
递归实现:
public
非递归实现版:
public
归并排序
归并排序(mergesort)时间复杂度:O(n log n),同样采用分治法实现。
步骤:
- 分割:递归地把当前序列平均分割成两半
- 归并:在保持元素顺序的同时将上一步得到的子序列集成到一起
递归实现:
public
非递归实现:
public
关于它们具体的工作原理网上多的是,但真的把代码整整齐齐的写出来的还真不多,白看不如一敲,我还是直接放代码比较好。具体的详细原理介绍可以随便搜一下有助于理解,我这里就不 copy 啦。
最近在学算法,后面我还会继续把常见的几种排序法发出来。
如果觉得还不错的话,欢迎关注我的个人公众号,我会不定期发一些干货文章~
也可以加我微信: