数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序
排序
内部排序:数据量不大,在内存中可以完成排序。
外部排序:借助外存。把数据文件分成若干块,涉及内外存数据的转换、存储器的管理等。
稳定排序:能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。
不稳定排序:不是上面稳定的情况。
稳定的排序算法:直接插入排序、冒泡排序、归并排序
不稳定的排序算法:希尔排序、快速排序、简单选择排序、堆排序
参考:八大排序算法 https://blog.csdn.net/hguisu/article/details/7776068
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
插入排序
来一个,插一个。
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以直接插入排序是稳定的。
希尔排序:也是一种插入排序。
上面先增量为5,再增量为3
最后再增量为1,就是全体排序。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
交换排序:
冒泡排序
快速排序
选择一个元素,放到它自己合适的位置,它的前面都比他小,他的后面都比他大。
比他小的往前站,比他大的往后站。前面和后面的顺序不管。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
选择排序
先选取最小的,作为第一个
再选取当前最小的最为第二个数。
....
堆排序
一种选择排序
堆排序是一种树形选择排序,是对直接选择排序的有效改进。
上面非终端节点就是非叶子节点,中间的点。
首先创建一个堆。再输出堆顶元素。剩下的元素再调整成堆。。。
创建堆过程:
1、先当做完全二叉树罗列起来。
2、调整成为堆:
从最后一个非终端节点,不满足堆就交换。不断把小的往上推。。。。
注意上图,49和13交换后,49下来对下面的影响,再调整。
最后,13输出后,再把97放在最上面,再调整。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
归并排序:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
基数排序:
说基数排序之前,先说桶排序:桶式排序是一种分配排序。
简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶里面的再进行排序(不管什么方式)。
基数排序:(用多趟桶排序)
对数字型或字符型的单关键字,可以看作由多个数位或多个字符构成的多关键字,此时可以采用“分配-收集”的方法进行排序,这一过程称作基数排序法,其中每个数字或字符可能的取值个数称为基数。比如,扑克牌的花色基数为4,面值基数为13。在整理扑克牌时,既可以先按花色整理,也可以先按面值整理。按花色整理时,先按红、黑、方、花的顺序分成4摞(分配),再按此顺序再叠放在一起(收集),然后按面值的顺序分成13摞(分配),再按此顺序叠放在一起(收集),如此进行二次分配和收集即可将扑克牌排列有序。
数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序相关推荐
- 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树
文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...
- 内排序及时间复杂度分析-插入排序选择排序交换排序归并排序分配和索引排序对比...
基本概念 什么是排序? 排序 将序列中的记录按照排序码顺序排列起来 排序码域的值具有不减(或不增)的顺序 内排序 整个排序过程在内存中完成 给定一个序列 R = { r1, r2, ...,rn } ...
- 八大排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序、基数排序
[前言] 所有代码段都以升序为例,数组下标从0开始.排序的稳定性即:任意两个相等的数据,排序前后的相对位置不发生变化. [冒泡排序(Bubble Sort)] 它重复地访问过要排序的元素序列,依次比较 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 【八大排序详解~C语言版】直接插入排序-希尔排序- 直接选择排序-堆排序-冒泡排序-快速排序-归并排序-计数排序
八大排序 1.直接插入排序 2.希尔排序 3.直接选择排序 直接选择排序改进 4.堆排序 1.建堆 2.利用堆删除思想来进行排序 5.冒泡排序 6.快速排序 递归实现 非递归实现 7.归并排序 递归实 ...
- 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)
*排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...
- 排序算法(分类,时间复杂度)(快速排序,插入排序,希尔排序,选择排序,冒泡排序)
1.排序算法 1.排序的分类 分为内部排序和外部排序,其中内部排序分为插入排序.选择排序.交换排序.归并排序和基数排序.插入排序包括直接插入排序和希尔排序:选择排序包括简单选择排序和堆排序:交换排序包 ...
- C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序
常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...
- 冒泡排序,插入排序,选择排序三种算法的优劣
https://www.jianshu.com/p/9f724c880124 最近听了王争老师的数据结构与算法之美,大有获益,特写此博客与大家分享. 排序算法太多了,但大体可以归结于三类,冒泡排序,插 ...
- 【排序算法】冒泡排序|选择排序|插入排序|希尔排序
文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序 第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...
最新文章
- 导师(老板)推荐的学术前沿号
- php websocket 心跳包,websocket 心跳包重连
- linux修改ssh登陆端口号,Linux 6 修改ssh默认远程端口号的操作步骤
- Selenium Webdriver元素定位的八种常用方式
- 相对于oracle数据库的作用 类似于,郑州大学软件技术学院Oracle试卷
- java linux runtime 正则表达式_Java学习之正则表达式
- Angularjs进阶笔记(2)—自定义指令中的数据绑定
- 杭电1285确定比赛名次
- 腾讯内部转岗_腾讯微博即将关停,网友:竟然还活着?
- java语言函数存储在哪个包_java专项联系题
- VS 2013 统一修改所有工程的目录配置(以 boost、opencv3 的安装为例)
- 无法扩展该卷 因为群集的数量将超过文件系统_Ubifs文件系统分析
- 利用Python进行数据分析--数据加载、存储与文件格式
- 【斯坦福大学新研究】声波、光波等都是RNN
- Linux 文件操作
- MySQL grant、revoke 用户权限注意事项
- 主机前面板耳机插孔无声音解决
- Java取整函数(ceil、floor、round)
- 服务器系统修复工具,Windows Repair(系统修复工具) v4.9.0
- JSHOP2学习2:十分钟建立一个舒适的编译环境