//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄

                               QQ群:807236138  群称: iOS 技术交流学习群

                               QQ群:713799633   群称:iOS技术交流学习群-2

排序图表:

一、插入排序

  每次将一个待排序的数据,跟前面已经有序的序列的数字一一比较找到自己合适的位置,插入到序列中,直到全部数据插入完成。

二、希尔排序

  先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。由于希尔排序是对相隔若干距离的数据进行直接插入排序,因此可以形象的称希尔排序为“跳着插”

三、冒泡排序

通过交换使相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就“沉”到最后面了。重复N次即可以使数组有序。

冒泡排序改进1:在某次遍历中如果没有数据交换,说明整个数组已经有序。因此通过设置标志位来记录此次遍历有无数据交换就可以判断是否要继续循环。

冒泡排序改进2:记录某次遍历时最后发生数据交换的位置,这个位置之后的数据显然已经有序了。因此通过记录最后发生数据交换的位置就可以确定下次循环的范围了。

四、快速排序

“挖坑填数+分治法”,首先令i =L; j = R; 将a[i]挖出形成第一个坑,称a[i]为基准数。然后j--由后向前找比基准数小的数,找到后挖出此数填入前一个坑a[i]中,再i++由前向后找比基准数大的数,找到后也挖出此数填到前一个坑a[j]中。重复进行这种“挖坑填数”直到i==j。再将基准数填入a[i]中,这样i之前的数都比基准数小,i之后的数都比基准数大。因此将数组分成二部分再分别重复上述步骤就完成了排序。

五、选择排序

数组分成有序区和无序区,初始时整个数组都是无序区,然后每次从无序区选一个最小的元素直接放到有序区的最后,直到整个数组变有序区。

六、堆排序

图:

堆的插入就是——每次插入都是将新数据放在数组最后,而从这个新数据的父结点到根结点必定是一个有序的数列,因此只要将这个新数据插入到这个有序数列中即可。

堆的删除就是——堆的删除就是将最后一个数据的值赋给根结点,然后再从根结点开始进行一次从上向下的调整。调整时先在左右儿子结点中找最小的,如果父结点比这个最小的子结点还小说明不需要调整了,反之将父结点和它交换后再考虑后面的结点。相当于从根结点开始将一个数据在有序数列中进行“下沉”。

因此,堆的插入和删除非常类似直接插入排序,只不是在二叉树上进行插入过程。所以可以将堆排序形容为“树上插”

七、归并排序

归并排序主要分为两步:分数列(divide),每次把数列一分为二,然后分到只有两个元素的小数列;合数列(Merge),合并两个已经内部有序的子序列,直至所有数字有序。用递归可以实现。

八、基数排序(桶排序)

基数排序,第一步根据数字的个位分配到每个桶里,在桶内部排序,然后将数字再输出(串起来);然后根据十位分桶,继续排序,再串起来。直至所有位被比较完,所有数字已经有序。

  

谢谢!!!

各个排序算法的时间复杂度和稳定性,快排的原理相关推荐

  1. 各个排序算法的时间复杂度、稳定性、快排的原理以及图解

    目录 一.数据结构的八大排序算法总结笔记: 1.常见的数据结构排序算法如下图所示: 2.常见数据结构排序算法的时间复杂度.空间复杂度.稳定性介绍如下图所示: 二.排序算法逐一介绍: 1.直接插入排序: ...

  2. 【排序算法】——图解双轴快排(建议收藏)

    原创公众号:「bigsai」,转载需注明出处 关注回复bigsai领取Java进阶pdf,回复进群加入力扣打卡群(目前200+). 觉得不错还请一键三连! 前言 在排序算法中,快排是占比非常多的一环, ...

  3. 常用的排序算法的时间复杂度以及稳定性

    排序算法分为一般排序和高级排序,高级排序算法往往效率超高,除此之外,排序算法的稳定性也是可参考的一个指标之一. 一般排序算法 一.冒泡排序 算法代码实现 #include "stdio.h& ...

  4. 常用排序算法的时间复杂度和稳定性

    如题,见图 名词解释: 1)稳定:如果 a原本在 b前面,而 a=b,排序之后 a仍然在 b的前面: 2)不稳定:如果 a原本在 b的前面,而 a=b,排序之后 a可能会出现在 b的后面: 3)内排序 ...

  5. 各个排序算法及其时间复杂度

    各个排序算法及其时间复杂度 一.内部排序: 1.稳定的排序算法 1.1 冒泡排序 1.1.1 冒泡排序流程 1.1.2 冒泡排序的实现 1.2 插入排序 1.2.1 插入排序流程 1.2.2 插入排序 ...

  6. 各种排序算法的时间复杂度对比

    各种排序算法的时间复杂度对比 排序算法 最坏时间复杂度 平均时间复杂度 最优时间复杂度 空间复杂度 稳定性 冒泡排序 O(n^2) O(n^2) O(n) O(1) 稳定 插入排序 O(n^2) O( ...

  7. 各种排序算法的时间复杂度

    时间复杂度 当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,在算法分析时,经常是将渐近时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度 ...

  8. 各种常用排序算法的时间复杂度和空间复杂度

    https://blog.csdn.net/jiajing_guo/article/details/69388331 一.常用排序算法的时间复杂度和空间复杂度表格 二.特点 1.归并排序: (1)n大 ...

  9. 各种排序算法的时间复杂度和空间复杂度-记忆方式

    直选冒,三朴素 (直接插入排序,简单选择排序,冒泡排序是三种朴素算法,一般是o(n)~o(n^2)) 简选排,序无关 (简单选择排序算法与开始序列无关,最好最坏都是o(n^2)) 其余五,数优化 (其 ...

最新文章

  1. 图书借阅系统java_基于JAVAWEB的图书借阅系统
  2. zabbix 安装配置介绍
  3. windows下安装redis以及一些常规操作
  4. BST | 1064 完全二叉搜索树
  5. java链接mysql数据库格式_JDBC URL连接常用数据库格式
  6. 报表系统FineReport通过权限控制数据访问方案
  7. 百度积极回应阿波龙项目不实报道;半数开发者认为学习新语言很困难;腾讯在长沙建立首个智慧产业总部……...
  8. 从零开始的全栈工程师——underscore
  9. android开发学习计划
  10. Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
  11. php获取ICON图标
  12. 蓝桥杯练习------python字符串逆序
  13. html怎么显示五线谱,CSS3 响应式乐谱 音乐符号 五线谱
  14. (附源码)php新闻发布平台 毕业设计 141646
  15. Maximum upload size exceeded
  16. 向上管理:如何正确汇报工作
  17. Java开源工具库使用之Apache commons-lang3
  18. 【面经】Linux零碎系列
  19. mac下面用ffmpeg抓取桌面以及摄像头推流进行直播
  20. python带你获取视频及弹幕数据~知识点满满(含完整源代码)

热门文章

  1. Haar-like特征计算和积分图详解
  2. Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型
  3. 某云不限速破解详细教程附工具
  4. 俞敏洪:人生最重要的两件事是什么?
  5. php判断用户是微信浏览器还是其他浏览器,PHP区分企业微信浏览器|普通微信浏览器|其他浏览器...
  6. 卷积神经网络大盘拐点预测
  7. android 代码 lut,如何将颜色LUT应用于位图图像以获取android中的滤镜效果?
  8. python爬取代理IP并进行有效的IP测试
  9. R语言基础数据分析—单因素方差分析
  10. 三星高价卖苹果iPhone X OLED屏幕, 苹果或寻新队友