选择排序 插入排序 交换排序
动图演示:
https://www.runoob.com/w3cnote/bubble-sort.html
选择排序
简单选择排序
在未排序的序列中,选出最小的元素和序列的首位元素交换,接下来在剩下的未排序序列中,再选出最小元素与序列的第二位元素交换,以此类推,最后形成从小到大的已排序序列
对N个记录进行简单选择排序,比较次数和移动次数分别为O(N^2)和O(N)。
需要比较N*(N-1)/2次,时间复杂度O(N2)
空间复杂度S(N)=O(1)
稳定性:不稳定
堆排序
时间复杂度O(NlogN)
空间复杂度O(1)
不稳定
实现堆排序的一种简单做法是:额外开辟一个辅助的数组空间,将堆顶元素逐一放入辅助数组里,最后再把辅助数组的内容复制回原始的数组
这种方法的额外空间复杂度为O(1)
对N个记录进行堆排序,需要的额外空间为O(N)。F
堆排序仅需一个记录大小供交换用的辅助存储空间,所以空间复杂度为O(1)
插入排序
简单插入排序
稳定
最好情况O(N)
最坏情况O(N2)
核心思想:将待排序的一组序列分为已经排好序的和未排好序的两个部分
初始状态时,已排序序列仅包含第一个元素,未排序序列中的元素为除了第一个以外的N-1个元素
此后将未排序序列中的元素逐一插入到已排序的序列中
如此往复
经过N-1次插入后,未排序序列中元素的个数为0,则排序完成
希尔排序
交换排序
冒泡排序
快速排序
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(N2)
在平均状况下,排序n 个项目要Ο(nlogn) 次比较
快速排序又是一种分而治之思想在排序算法上的典型应用
- 从数列中挑出一个元素,称为 “基准”
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。F
得看"有序"是正序还是逆序
要从50个键值中找出最大的3个值,选择排序比堆排序快。
T
下列排序算法中,哪种算法可能出现:在最后一趟开始之前,所有的元素都不在其最终的位置上?(设待排元素个数N>2)
A.冒泡排序
B.插入排序
C.堆排序
D.快速排序
下面四种排序算法中,稳定的算法是:
A.堆排序
B.希尔排序
C.归并排序
D.快速排序
https://blog.csdn.net/Jessieeeeeee/article/details/107307114
选择排序 插入排序 交换排序相关推荐
- 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)
目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...
- 冒泡排序选择排序插入排序
目录 冒泡排序 选择排序 插入排序 冒泡排序 冒泡排序(最好是O(n), 最坏O(n2)) 原理: 拿自己与上面一个比较,如果上面一个比自己小就将自己和上面一个调换位置,依次再与上面一个比较,第一轮结 ...
- C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序
常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...
- 【排序算法】冒泡排序|选择排序|插入排序|希尔排序
文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序 第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...
- c语言数组项目按身高排序,过三关 Java冒泡排序选择排序插入排序小练习
材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...
- 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序
养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...
- 数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序
排序 内部排序:数据量不大,在内存中可以完成排序. 外部排序:借助外存.把数据文件分成若干块,涉及内外存数据的转换.存储器的管理等. 稳定排序:能保证排序前两个相等的数其在序列的前后位置顺序和排序后它 ...
- 疯子的算法总结(六) 简单排序总 选择排序+插入排序+比较排序+冒泡排序
一.数组的排序算法 1.选择排序 选择排序是指每次选择所需排序数组中的最大值或者最小值(根据排序方式选择,从大到小选最大,从小到大选最小),将这个元素与前面没有进行排序的元素交换. 下面以1 4 2 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
最新文章
- python3中的多线程
- NLPIR语义挖掘建互联网内容处理全技术链条
- 调制优缺点_复合铝基润滑脂和普通润滑脂的区别,复合铝基脂有什么优缺点
- Java动态代理代码案例:使用cglib实现对无接口的类进行动态代理
- React学习初探(环境搭建)
- Android Calender
- MapInfo MapXtreme 2005 WebGIS 简单鹰眼设计(转)
- leetcode 338 比特位计数
- 05月08日 学习列表
- 微信,支付宝,银行卡提现功能简述
- 优雅编程之项目开发中的22点编码小建议(三十七)
- Python自学的好方法
- Jrebel、IDEA的激活与Springloaded使用
- 谷歌chrome安卓版_Chrome+Android能摩擦出怎样的火花?Fyde OS深入体验笔记
- Cordova开机画面
- C++ QT开发人机象棋(搜索算法)
- Microsoft Azure IoT Hub应用 – 第一部分:向云端发送数据
- 渠道二维码服务号实现渠道二维码的关注与统计怎么弄?
- C#调用百度api,根据经度和纬度获取地理位置信息
- GKCTF EZ三剑客-EzWeb 题目分析总结
热门文章
- 五、Web App 基础可视组件属性(IVX 快速开发教程)
- 商丘高中计算机考试成绩查询系统,2019商丘中考招生成绩查询时间及网站公布...
- 115怎么利用sha1下载东西_618“甩”度娘,拥抱115,体验和价格才是王道
- lisp画靶子 visual_基于VisualLISP的AutoCAD绘图命令的二次开发_沈良翼
- python运行时间过长怎么优化_Python性能优化的20条建议
- 炸了!中国学者首次被Science撤稿,与之前首次被Nature撤稿的教授来自同一所大学……...
- 培养沙雕要从娃娃抓起
- 206块积木,72套进阶玩法!玩转STEAM教育,帮你省掉上万块的乐高课
- 预售┃一张纸一幅图,竟然提高了10倍的学习和工作效率!?
- php long2ip,php 中IPV6 ip2long的问题解决办法