中午吃饭的时候和同事讨论了下JDK的排序算法的实现,同事坚持认为是简单的插入排序,觉得JDK应该不会这么弱,看了下JDK的源码,发现JDK针对排序是做了大量的优化的。
JDK对排序的实现在Arrays的sort方法里,Arrays里面有大量的重载的sort方法。而JDK7和JDK6的排序算法又有一些不同。
JDK6排序实现
JDK6对的排序实现针对基本类型和对象又有不同。
- 对于基本类型,由于不要求排序是稳定的,因此使用了平均效率最好的排序算法——快速排序。为了避免最差情况的出现,JDK6对排序算法做了些优化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
|
- 针对对象数组,为了保证排序是稳定的,JDK6采用了归并排序,同样也做了一些优化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|
JDK7的排序实现
JDK7针对基本类型使用了Dual Pivot Quicksort,这种快速排序算法,相对于传统的单Pivot的快速排序效率要更好。
JDK7针对对象数组采用了TimSort, 这也是python的排序算法。