算法——几种排序算法的比较和应用

稳定性:若是一个排序算法可以保留数组中重复元素的相对位置则能够被称为是稳定的。例如,一组数据先按照时间排序,再按照地理位置排序。若是第二次排序的排序算法具备稳定性,那么相同地理位置的数据仍是按照时间排序的。java

只有插入排序、冒泡排序和归并排序是稳定的。程序员

各类排序算法的性能特色算法

算法 是否稳定 是否为原地排序 时间复杂度 空间复杂度 备注
选择排序 1  
冒泡排序 介于N和N²之间 1  
插入排序 介于N和N²之间 1 取决于输入元素的排列状况
希尔排序 近似于NlogN 1  
快速排序 NlogN lgN 运行效率由几率提供保证
三向快速排序 介于N和NlogN之间 lgN 运行效率由几率保证,同时也取决于输入元素的分布状况
归并排序 NlogN N  
堆排序 NlogN 1  


应用选择数组

①大多数实际状况中,快速排序是最佳选择;可是若是稳定性很重要,而空间又不是问题,归并排序多是最好的。less

②将原始数据类型排序:一些性能优先的应用的重点多是将数字排序,所以更合理的作法是跳过引用在直接将原始数据类型排序。例如,将double类型的数组和Double类型的数组排序有很大差异,前者能够直接交换这些数,然后者咱们交换的是存储了这些数字的Double对象的引用。具体方法是把Comparable借口替换为原始数据类型名,重定义less()方法或者干脆将调用less方法的地方替换为a[i]<a[j]这样的代码。性能

Java系统库的排序算法spa

Java系统库中的主要排序方法java.util.Arrays.sort()。根据不一样的参数leixing,他实际上表明了一系列的排序方法。对象

①每种原始数据类型都有一个不一样的排序方法;排序

②一个适用于全部实现了Comparable接口的数据类型的排序算法;接口

③一个适用于实现了比较器Comparable的数据类型的排序算法。

Java程序员算着对原始数据类型使用(三向切分的)快速排序;对引用类型使用归并排序(稳定性)。

相关文章
相关标签/搜索