今天查看了java文档中的sort方法
- 发现java中的Arrays.sort()不再使用经典快排,而是用了来自 Vladimir Yaroslavskiy, Jon Bentley, and Joshua Bloch的双pivot方法:
于是我又查看了一下网上的介绍,发现这种方法之所以比经典快排要快,是因为
cpu和内存速度不匹配,
所以排序算法的速度瓶颈在内存上,对应到具体实现上就是“访问数组元素次数”,
而算法上对时间复杂度的主要考虑是“元素比较次数”,而这主要是在cpu中实现的,也就是说,因为目前存在的
“cpu等内存”
的现象,新的dual-pivot快排才得以击败经典的one-pivot快排!