博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法总结
阅读量:4092 次
发布时间:2019-05-25

本文共 1005 字,大约阅读时间需要 3 分钟。

 

一、常见问题

1、什么是稳定性?哪些排序算法是稳定排序?

稳定性,大概就是能保证排序前后,两个相等的数在序列中的相对次序不变,即,排序前A在A'前面,排序后A依然在A'前面。

稳定的排序有:冒泡排序(每次比较相邻两个元素,当前者比后者大时交换,当两者相等时不交换)、插入排序(如果已排序部分的当前元素比待插入元素大才右移,相等则不右移)、归并排序(底层基于合并操作,而合并操作不改变相同元素的先后顺序)、

不稳定的排序有:选择排序(5,8,5,2,9经过一轮排序之后,两个5的先后顺序发生了变化)、希尔排序(相同的元素可能被分配到各自的组中进行插入排序,在插入排序中的移动有可能导致其先后顺序发生改变)、快速排序()

 

2、初始排列顺序对算法的影响

算法复杂度与初始状态无关的有:选择排序、堆排序、归并排序、基数排序

元素总比较次数与初始状态无关的有:选择排序、基数排序

元素总移动次数与初始状态无关的有:归并排序、基数排序

 

 

3、小结

算法 稳定性 时间复杂度(平均、最好、最坏) 空间复杂度 排序方式 备注
冒泡排序 O(n^2)   O(n)   O(n^2) O(1) In-place  
选择排序 × O(n^2)   O(n^2)   O(n^2) O(1) In-place  
插入排序 O(n^2)   O(n)    O(n^2) O(1) In-place 时间复杂度和初始顺序有关,因此通常处理一个基本有序的序列
希尔排序 × O(nlogn)   O(n(logn)^2)   O(n(logn)^2)  O(1) In-place 分组进行插入排序(步长+插入排序)
归并排序 O(nlogn)   O(nlogn)   O(nlogn) O(n) Out-place  
快速排序 × O(nlogn)   O(nlogn)   O(n^2) O(logn) In-place  
三向切分快速排序 × N ~ NlogN O(logn)   适用于有大量重复主键
堆排序 × O(nlogn)   O(nlogn)   O(nlogn) O(1) In-place 无法利用局部性原理
计数排序 O(n+k)   O(n+k)   O(n+k) O(k) Out-place  
桶排序 O(n+k)   O(n+k)   O(n^2) O(n+k) Out-place  
基数排序 O(n*k)   O(n*k)   O(n*k) O(n+k) Out-place  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://gfnii.baihongyu.com/

你可能感兴趣的文章
Socket经验记录
查看>>
对RTMP视频流进行BitmapData.draw()出错的解决办法
查看>>
SecurityError Error 2148 SWF 不能访问本地资源
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
JVM内存模型_Minor GC笔记
查看>>
SpringCloud学习之PassCloud——(一)PassCloud源代码下载
查看>>
Nginx篇-springCloud配置Gateway+Nginx进行反向代理和负载均衡
查看>>
缓存篇-Redis缓存失效以及解决方案
查看>>
phpquery抓取网站内容简单介绍
查看>>
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
原来k8s docker是用go语言写的,和现在所讲的go是一个东西!
查看>>
STM32CubeMX 真的不要太好用
查看>>
STM32CubeMX介绍、下载与安装
查看>>
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>