面试中可能被问到的常用排序算法(4)

上面演示的代码也被成为2-路归并排序,其核心思想是将以为数组中前后响铃的两个有序序列合并为一个有序序列。但是实际上平时我们不会使用这种排序方式。

但是归并排序使用场景还是很多的,特别是在对数量较大的序列进行排序是,比如目前我们有大量的数据存储在文本中,现在需要对其进行排序。由于内存的限制没有办法一次性加载所有的数据,这时候我们就可以使用归并排序,将大的文件分割为若干份小文件,分别对这些小文件的数据进行排序后使用归并排序再将其进行排序。并且排序过程中可以使用多线程等手段提高算法效率。

TIMSort

在JDK中,Arrays工具类为我们提高了各种类型的排序方法,Arrays.sort在JDK1.6及之前使用的是归并排序,在1.7开始使用的是TimSort排序。

TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中可以有较好的性能。基本工作过程是:
1.扫描数组,确定其中的单调上升段和严格单调下降段,将严格下降段反转;
2.定义最小基本片段长度,短于此的单调片段通过插入排序集中为长于此的段;
3.反复归并一些相邻片段,过程中避免归并长度相差很大的片段,直至整个排序完成,所用分段选择策略可以保证O(n log n)时间复杂性。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/41faa030097a86d44aa9ade018b3973d.html