动图演示:
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

选择排序 插入排序 交换排序相关推荐

  1. 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)

    目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...

  2. 冒泡排序选择排序插入排序

    目录 冒泡排序 选择排序 插入排序 冒泡排序 冒泡排序(最好是O(n), 最坏O(n2)) 原理: 拿自己与上面一个比较,如果上面一个比自己小就将自己和上面一个调换位置,依次再与上面一个比较,第一轮结 ...

  3. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  4. 【排序算法】冒泡排序|选择排序|插入排序|希尔排序

    文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序   第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...

  5. c语言数组项目按身高排序,过三关 Java冒泡排序选择排序插入排序小练习

    材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...

  6. 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...

  7. 数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序

    排序 内部排序:数据量不大,在内存中可以完成排序. 外部排序:借助外存.把数据文件分成若干块,涉及内外存数据的转换.存储器的管理等. 稳定排序:能保证排序前两个相等的数其在序列的前后位置顺序和排序后它 ...

  8. 疯子的算法总结(六) 简单排序总 选择排序+插入排序+比较排序+冒泡排序

    一.数组的排序算法 1.选择排序 选择排序是指每次选择所需排序数组中的最大值或者最小值(根据排序方式选择,从大到小选最大,从小到大选最小),将这个元素与前面没有进行排序的元素交换. 下面以1 4 2 ...

  9. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

最新文章

  1. python3中的多线程
  2. NLPIR语义挖掘建互联网内容处理全技术链条
  3. 调制优缺点_复合铝基润滑脂和普通润滑脂的区别,复合铝基脂有什么优缺点
  4. Java动态代理代码案例:使用cglib实现对无接口的类进行动态代理
  5. React学习初探(环境搭建)
  6. Android Calender
  7. MapInfo MapXtreme 2005 WebGIS 简单鹰眼设计(转)
  8. leetcode 338 比特位计数
  9. 05月08日 学习列表
  10. 微信,支付宝,银行卡提现功能简述
  11. 优雅编程之项目开发中的22点编码小建议(三十七)
  12. Python自学的好方法
  13. Jrebel、IDEA的激活与Springloaded使用
  14. 谷歌chrome安卓版_Chrome+Android能摩擦出怎样的火花?Fyde OS深入体验笔记
  15. Cordova开机画面
  16. C++ QT开发人机象棋(搜索算法)
  17. Microsoft Azure IoT Hub应用 – 第一部分:向云端发送数据
  18. 渠道二维码服务号实现渠道二维码的关注与统计怎么弄?
  19. C#调用百度api,根据经度和纬度获取地理位置信息
  20. GKCTF EZ三剑客-EzWeb 题目分析总结

热门文章

  1. 五、Web App 基础可视组件属性(IVX 快速开发教程)
  2. 商丘高中计算机考试成绩查询系统,2019商丘中考招生成绩查询时间及网站公布...
  3. 115怎么利用sha1下载东西_618“甩”度娘,拥抱115,体验和价格才是王道
  4. lisp画靶子 visual_基于VisualLISP的AutoCAD绘图命令的二次开发_沈良翼
  5. python运行时间过长怎么优化_Python性能优化的20条建议
  6. 炸了!中国学者首次被Science撤稿,与之前首次被Nature撤稿的教授来自同一所大学……...
  7. 培养沙雕要从娃娃抓起
  8. 206块积木,72套进阶玩法!玩转STEAM教育,帮你省掉上万块的乐高课
  9. 预售┃一张纸一幅图,竟然提高了10倍的学习和工作效率!?
  10. php long2ip,php 中IPV6 ip2long的问题解决办法