扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
研究java源代码:关于Arrays.sort
仔细看了下众多Arrays.sort的重载方法。
发现java在实现这些sort方法的时候,排序Object的时候都是用合并排序
排序primitive(int,float等原型数据)的时候用的是快速排序,为什么要
这样呢,不是说快速排序是最好的吗?为什么都不用快速排序排呢?
首先呢,虽然归并排序的时间复杂度是O(nlgN),但是它很难用于主存排序,主要问题在于合并两个排序的表. 需要线性附加内存,在整个算法中还要花费将数据复制到临时数组在复制回来的一些附加的操作。在java语言中,当排序一般的对象时,元素的比较消耗时很多,但是移动元素就很快,所以呢,归并排序使用最少次数的比较. 因此,在java中归并排序是一般目的排序的最佳选择。
对于基本类型,稳定与否并不重要,比如两个5,谁在前谁在后并不重要.
但是对于引用类型,它是有实际意义的,用户可能希望对于排序用的关键字相同的,保留原来的顺序.比如成绩单,一开始可能是按人员的学号顺序排好了的,现在让我们用成绩排,那么你应该保证,本来张三在李四前面,即使他们成绩相同,张三不能跑到李四的后面去.
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者