数据排序方法的比较
2016-04-22 15:24
197 查看
总结一下不同的数据排序算法
首先,排序根据排序方式的不同分为四大类:插入排序、选择排序、交换排序、归并排序
插入排序类: 直插排序 稳定 时间复杂度O(n^2)
希尔排序 不稳定 时间复杂度O(n^1.5)
选择排序类: 简单选择排序 稳定 时间复杂度O(n^2)
堆排序 不稳定 时间复杂度O(nlogn)
交换排序类:冒泡排序 稳定 时间复杂度O(n^2)
快速排序 不稳定 时间复杂度O(nlogn)
空间复杂度O(logn)~O(n)
归并排序类:归并排序 稳定 时间复杂度O(nlogn) 空间复杂度O(n)
从时间复杂度来看,显然堆排、快排、归并要更好一些,而归并排序牺牲了空间复杂度换取了稳定性的提升,在一些非常在乎稳定性的环境中用归并排序是一个不错的选择。而在一些非常在意内存容量的环境中,几乎没有多占用堆排序就显得更好了。
相对于三种比较复杂的排序方法,如果数据量很小的话那么冒泡排序、直插排序来的更快一些
假如说需要排序的每个数据本身非常庞大,那么可以选择交换次数比较少的简单选择排序。
不受初始数据状态影响的排序方式有:简单选择排序、堆排序、归并排序
首先,排序根据排序方式的不同分为四大类:插入排序、选择排序、交换排序、归并排序
插入排序类: 直插排序 稳定 时间复杂度O(n^2)
希尔排序 不稳定 时间复杂度O(n^1.5)
选择排序类: 简单选择排序 稳定 时间复杂度O(n^2)
堆排序 不稳定 时间复杂度O(nlogn)
交换排序类:冒泡排序 稳定 时间复杂度O(n^2)
快速排序 不稳定 时间复杂度O(nlogn)
空间复杂度O(logn)~O(n)
归并排序类:归并排序 稳定 时间复杂度O(nlogn) 空间复杂度O(n)
从时间复杂度来看,显然堆排、快排、归并要更好一些,而归并排序牺牲了空间复杂度换取了稳定性的提升,在一些非常在乎稳定性的环境中用归并排序是一个不错的选择。而在一些非常在意内存容量的环境中,几乎没有多占用堆排序就显得更好了。
相对于三种比较复杂的排序方法,如果数据量很小的话那么冒泡排序、直插排序来的更快一些
假如说需要排序的每个数据本身非常庞大,那么可以选择交换次数比较少的简单选择排序。
不受初始数据状态影响的排序方式有:简单选择排序、堆排序、归并排序
相关文章推荐
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- 利用spring的profile切换不同的环境
- CSS display:block inline
- 关于百度地图申请key和混淆说明
- 个人工作总结04
- 数据结构与算法分析java——树2(二叉树类型)
- retrofit 接口说明
- linux 安装tomcat服务器及IP地址或者域名访问
- linux挂载文件系统过程-转载内容与自己的一些理解
- 10、用户与安全
- Educational Codeforces Round 12(C)贪心
- 性能调优之网络篇 - ethtool 简单用法
- Oracle 性能优化之高消耗的SQL
- Android复习笔记1
- JSP+Servlet使用commons-fileupload上传文件连接被重置解决方案
- MySQL常用函数
- 实用SQL语句
- Light OJ 1094 (树的直径)
- Java开发--操作MongoDB
- gulp-rev:项目部署缓存解决方案----gulp系列(六)