数据结构C语言版 第八章 排序

内部排序

1、插入排序 :直接插入排序、折半插入排序、希尔排序
2、交换排序: 冒泡排序、快速排序、
3、选择排序: 简单选择排序、树形选择排序、堆排序

时间复杂度都为平均时间复杂度

直接插入排序:从初始关键字开始,每次加入一个新的关键字,直接与前面的关键字进行有序比较并插入到合适位置。(扩大有序记录,把新扩入的关键字直接插入到合适位置)时间复杂度O(n2) 空间复杂度 O(1)

折半插入排序:与直接插入类似,区别在于直接插入是通过顺序查找法在已排好的序列中寻找合适的插入位置,而折半插入是根据上章所讲的折半查找的方式寻找合适的插入位置。时间复杂度O(n2) 空间复杂度 O(1)

希尔排序:“缩小增量排序”通过把一组初始关键字进行分组,对每组分别进行直接插入。注意:如果增量是5 ,不是把从第一个关键字到第6个关键字之间的5个关键字进行直接插入排序,而是每间隔5个关键字的这些个关键字为一组,将他们进行直接插入排序。时间复杂度O(n1.3) 空间复杂度O(1)

冒泡排序:通过两两比较关键字,发现逆序则进行交换,使关键字小的记录像气泡一样往上“移动”(左移)或者使关键字大的记录往下“沉”(右移)时间复杂度时间复杂度O(n2) 空间复杂度 O(1)

快速排序:为改进冒泡排序每一趟只能消除一个逆序,用快速排序,选一个关键字为支点,把其余关键字与之比较,比它小的放到左边子表,比它大的放到右边子表,最后把支点放在中间位置,这样下来一趟就能消除多个逆序,再对每个子表进行同样操作,直至每个子表只有一个记录时,排序完成。时间复杂度时间复杂度O(nlog2n) 空间复杂度O(log2n)

简单选择排序:也称直接选择排序。从第一个位置开始,从所有关键字中比较出最小的关键字放在第一个位置,再从剩余的关键字中选择出最小的关键字,以此类推把有序序列选出来。时间复杂度时间复杂度O(n2) 空间复杂度 O(1)

堆排序:堆排序是树形选择排序的改进,把初始序列对应的一维数组(即以一维数组做此序列的存储结构)看成是一个完全二叉树,主要步骤是:1、初建堆:先把无序序列建成一个堆(完全二叉树)要求每个子树都满足堆的条件(树中所有非终端结点的值均不大于(或不小于)其左右孩子结点的值)
2、调整堆:建成的堆堆顶为最大值或者最小值,此时输出(去掉)堆顶元素,要把剩余元素调整为一个满足条件的新堆。时间复杂度时间复杂度O(nlog2n) 空间复杂度O(1)

例题:设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18}
1、直接插入排序

简单粗暴从第二个开始与前面比,找合适位置插入

[ 12 ] 2 16 30 28 10 16* 20 6 18

[ 2 12 ] 16 30 28 10 16* 20 6 18

[ 2 12 16 ] 30 28 10 16* 20 6 18

[ 2 12 16 30 ] 28 10 16* 20 6 18

[ 2 12 16 28 30 ] 10 16* 20 6 18

[ 2 10 12 16 28 30 ] 16* 20 6 18

[ 2 10 12 16 16* 28 30 ] 20 6 18

[ 2 10 12 16 16* 20 28 30 ] 6 18

[ 2 6 10 12 16 16* 20 28 30 ] 18

[ 2 6 10 12 16 16* 18 20 28 30 ]

2、希尔排序增量选取5、3、1

d=5

一趟排序结果 10 2 16 6 18 12 16* 20 30 28

d=3

二趟排序结果 6 2 12 10 18 16 16* 20 30 28

d=1

三趟排序结果 2 6 10 12 16 16* 18 20 28 30

3、冒泡排序
小的关键字往上飘,大的关键字往下沉


第七趟没有交换的关键字,证明序列已经有序,所以将剩余关键字全部输出。

4、快速排序

12 2 16 30 28 10 16* 20 6 18

一般选择第一个关键字为枢轴(支点)
第一趟 选择12 比12小的在左边,比12大的在右边
该序列就被分为比12小的左子表,比12大的右子表,左右子表仍根据此方法直到子表内只有一个关键字时结束

5、简单选择排序

从序列中选出最小的放到第一个位置,次小的放第二个…以此类推

2 [ 12 16 30 28 10 16* 20 6 18]

2 6 [12 16 30 28 10 16* 20 18]

2 6 10 [12 16 30 28 16* 20 18]

2 6 10 12 [ 16 30 28 16* 20 18]

2 6 10 12 16 [ 30 28 16* 20 18 ]

2 6 10 12 16 16* [ 30 28 20 18]

2 6 10 12 16 16* 18 [ 30 28 20 ]

2 6 10 12 16 16* 18 20 [ 30 28 ]

2 6 10 12 16 16* 18 20 28 [ 30 ]

2 6 10 12 16 16* 18 20 28 30

6、堆排序
把无序序列按照一层一层的画成完全二叉树,然后再根据初建堆的条件(根结点比叶子结点大)把二叉树调成。然后把根结点和最后一个结点交换,交换完后,堆的条件破坏,根节点不是最大的,所以就进行调整,把小的结点往下调,把最大的结点往上推,调整为新的堆。

数据结构(排序)2021-06-13相关推荐

  1. 小孩的游戏 - 2021数据结构 排序和选择实验题

    小孩的游戏 - 2021数据结构 排序和选择实验题 pre 做都做了, 干脆发上来算了 : D 题目分析 算法与数据结构实验题 5.18 小孩的游戏 ★实验任务 一群小孩子在玩游戏,游戏规则是这样子, ...

  2. Mculover666的博客文章导航(嵌入式宝藏站)(2021.06.17更新)

    一.MCU系列 1. 开发环境 [Keil MDK](一)Keil MDK 5.28 的下载.安装.破解 [Keil MDK](二)Keil MDK中芯片器件包的安装 [Keil MDK](三)Kei ...

  3. 2021.04.13丨sRNAnalyzer报错fastx_collapser: Invalid input: This looks like a multi-line FASTA file解决办法

    解决方法已更新:2021.06.19丨sRNAnalyzer报错fastx_collapser补充解决办法_穆易青的博客-CSDN博客 摘要 接到一个外泌体的miRNA分析,正常来说,本来可以直接使用 ...

  4. 2021.06.03邮票面值设计

    2021.06.03邮票面值设计 题目描述 给定一个信封,最多只允许粘贴 N 张邮票,计算在给定 K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值 MAX ...

  5. 电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场

    电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场 静止点电荷 具有均匀线密度的静止电荷产生的电场 具有均匀面密度的静止电荷产生的电场 用Fourier变换法计算电场 ...

  6. 数据结构---排序算法的总结

    数据结构-排序算法的总结 分类 冒泡排序,时间复杂度O(n x n),空间复杂度O(1),稳定 简单选择排序,时间复杂度O(n x n),空间复杂度O(1),不稳定 希尔排序,时间复杂度O(n^1.3 ...

  7. [2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)

    [2021.1.13多校省选模拟2]T1 一个经典的轮廓线dp,可以发现一定可以找到一条轮廓将这个图形分开,然后使得左半部分由左边处理,右半部分由右边处理,然后我们只需要处理这个折线即可,具体实现需要 ...

  8. 【笔试记录】2021/3/13美团

    2021/3/13美团笔试 1.旋转二维数组 m, n = map(int, input().split()) a = [] for _ in range(m):a.append(list(map(i ...

  9. 数据结构-排序基础代码

    数据结构-排序基础代码 1.快排的递归算法: void QuickSort(int A[],int n){Qsort(A,0,n-1); } void Qsort(int A[],int left,i ...

  10. 数据结构----排序

    ##数据结构--排序 Created with Raphaël 2.1.2选择选择直接选择直接选择堆排序堆排序直接选择堆排序大根堆.小根堆:找出最小(大)的Key Created with Rapha ...

最新文章

  1. 超全汇总 | ORB-SLAM2 / ORB-SLAM3 相关改进代码!
  2. iOS开发-UISwipeGestureRecognizer滑动手势
  3. java面试必背知识点
  4. 同学们,看看这里吧!!!
  5. paypal创建订单后怎么获得id_5步创建Facebook商店(最新版教程)学习如何在Facebook上卖货...
  6. 像亲和数一样亲密无间(洛谷P1851题解,Java语言描述)
  7. 飞鸽传书:不知不觉,时间又没了!
  8. android 数据库详解,Android-SQLite数据库操作详解
  9. 索引sql server_优化SQL Server索引策略
  10. [转帖]Docker save and load镜像保存
  11. 用 Python 的 selenium扩展 驱动 火狐 谷歌 浏览器
  12. 使用Voicemeeter同时输出音频到多个声卡
  13. nginx 报错502
  14. python模拟行星运动_动态模拟运行太阳系的行星运转
  15. 亚里士多德对于知识的分类
  16. das for gyb2.0新增特性说明
  17. 国际群发短信平台适用于哪些行业?
  18. PAC(Probably Approximately Correct,概率近似正确)
  19. 2019年7月28日 恶心人
  20. 常用JS图片滚动代码大全

热门文章

  1. 数据库完整性详细解释
  2. 航空客运订票系统C语言程序设计,航空客运订票系统的程序算法?
  3. 数据分析-ARIMA方法建模步骤总结
  4. 一篇文章学会ICP许可证如何年检
  5. 惊艳!ftrack和UE4,强强联合!
  6. php解压有密码的zip,linux下解压有密码的rar压缩包的方法
  7. 前端如何还原设计稿?
  8. 空洞骑士 Mac版 支持M1
  9. IPhone4S自定义铃声
  10. [培养锻炼能力][耳机]耳机线断裂维修经验