2013-03-11 42 views
4

在jdk标准库中是否有快速排序或另一种O(N.logN)排序,Quicksort or O(N.logN)sort in jdk

Collections类没有带来希望:

实现者应该可以随意替代其他算法,只要本身是坚持规范。 (例如,通过排序所使用的算法不必是一个合并,但它必须是稳定的。)

Collections.sort()没有给出线索:

排序(表<ŧ > list) 根据元素的自然顺序将指定列表按升序排序。

+1

检查http://stackoverflow.com/questions/753237/what-sort-does-java-collections-sortnodes-use – 2013-03-11 12:26:01

+1

@JonathanDrapeau谢谢你指出,我记得有关Timsort的消息,但忘记了它: http://en.wikipedia.org/wiki/Timsort,总是令人印象深刻的看到近年来出现的这种创新(2002年) – 2013-03-11 12:50:25

回答

1

分选依赖于Arrays.sort。由于排序方法取决于类型,读取JavaDoc并不那么明显。 一种改进的归并排序,或者根据阈值的调整快速排序:

/** 
* Tuning parameter: list size at or below which insertion sort will be 
* used in preference to mergesort or quicksort. 
*/ 
private static final int INSERTIONSORT_THRESHOLD = 7; 

这里是比较快速排序和归并后:Quick Sort Vs Merge Sort

结论:信任的Java实现,除非你真的知道自己在做什么。

2

Collections.sort是一种优化的合并排序,它实际上保证了每个情况下的O(n log n)并且它是稳定的; link