八大排序算法(理论和动态图)
八大排序算法
- 一、冒泡排序
- 二、选择排序
- 三、快速排序
- 四、归并排序
- 五、堆排序
- 六、直接插入排序
- 七、希尔排序
- 八、基数排序
排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或 递减的排列起来的操作。
一、冒泡排序
从第一个元素开始,每次比较相邻元素,如果元素顺序不正确,则进行交换,否则,比较下一对相邻元素。重复上述过程,直到所有元素都有序。
冒泡排序每次都可以将一个最值排到队尾,像水里冒泡泡一样,大的先浮上来,所以叫冒泡排序。
二、选择排序
选择数组最小的元素,与数组第一个元素交换,然后选择剩余的数组元素中最小的元素,与数组第二个元素交换,一直重复上述操作,直到数组有序。
选出第一小的与第一位交换,选出第二小的与第二位交换,直到全部有序。
三、快速排序
先选一个元素作为基点,将其余元素比基点小的放左边,比基点大的放右边,然后分别对左边和右边重复以上操作,直到所有元素有序。
四、归并排序
假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列,再两两归并,如此重复,直到得到一个长度为n的有序序列为止。
五、堆排序
以从小到大排序为例,先建立大顶堆,然后取出堆顶元素(堆顶元素一定是当前堆中的最大值),将堆的最后一个元素放置到堆顶。这时,并不是一个大顶堆,然后调整堆使其成为大顶堆,然后将堆顶元素取出,重复上述过程,直到最后一个元素。
六、直接插入排序
假设元素存储在数组 g 中,共有 n 个元素,依次遍历每一个元素,将元素 g[i] 按大小顺序插入到 0 ~ i 的位置。一直重复插入,直到第n个元素。
将第一个元素看作有序表,遍历2~n号元素,依次插入已构成的有序表的恰当位置,使之成为新的有序表。
七、希尔排序
通过设置一个增量n,大小为数组长度的一半,将间隔为n的元素视作一个组,然后对每个组内部的元素进行插入排序,然后再将增量n缩小为一半,再次进行分组插入排序,直到增量为1,即所有元素有序。
希尔排序是插入排序的改进版本,弥补了插入排序在某些情况下的缺点。
八、基数排序
按照数字的位数进行排序,即:先排个位,再排十位,再排百位……。有10个桶,标号为0~9。排序个位时,按照个位值的不同,分配到10个桶中(0分配到0号桶,1分配到1号桶,以此类推),然后将分配后的结果收集,这时候数组是按照个位排序的。继续按照十位重复上述排序过程,一直排序完所有的位数(取决于数组中最大数的位数)。
八大排序算法(理论和动态图)相关推荐
- C语言八大排序算法,附动图和详细代码解释!
文章来源:电子工程专辑.C语言与程序设计.竹雨听闲 一.前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二. ...
- 硬核!C语言八大排序算法,附动图和详细代码解释!
来源 :C语言与程序设计.竹雨听闲等 一 前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二 八大排序算法 ...
- c语言的八大排序算法,程序员的内功:C语言八大排序算法
四 一.冒泡排序 冒泡排序算法的运作如下: ●比较相邻的元素.如果第一个比第二个大,就交换他们两个. ●对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. ...
- 八大排序算法——(万字图文详解)
本篇文章是我对之前写过的八个排序算法的总结,感兴趣的小伙伴可以去我的八大排序算法专栏浏览,也可以点击下方标题跳转. 提示:本篇博客篇幅较长,建议小伙伴们查看目录,按需浏览 目录 正文 1 直接插入排序 ...
- 图解八大排序算法——我见过的最详细的讲解(转)
一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...
- 用python排序算法_Python - 八大排序算法
1.序言 本文使用Python实现了一些常用的排序方法.文章结构如下: 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.简单选择排序 6.堆排序 7.归并排序 8.基数排序 上述所有的 ...
- 八大排序算法:插入(2:插入、希尔)、选择(2:选择、堆)、交换(2:冒泡、快速)、归并、基数
八大排序算法 发表于2012/7/23 16:45:18 662397人阅读 分类: c/c++ 数据结构与算法 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排 ...
- 八大排序算法简明扼要
八大排序算法 冒泡排序(暴力排序).选择排序.快速排序.归并排序(后序排序).链式基数排序.插入排序.希尔排序.堆排序. 拥有相关性的排序: (选择排序.快速排序):(插入排序.希尔排序): 时间复杂 ...
- 八大排序算法(java实现) 冒泡排序 快速排序 堆排序 归并排序 等
八大排序算法 一.直接插入 - 1.基本思路 - 2.代码实现 - 3.时间复杂度和空间复杂度 二.希尔排序 - 1.基本思路 - 2.代码实现 - 3.时间复杂度和空间复杂度 三.简单选择 - 1. ...
最新文章
- Exchange Server 2013 安装完成后配置外部URL
- 【TensorFlow】:Eager Mode(动态图模式)
- FxCop的一些规范建议
- dubbo是长连接还是短连接_从快手短视频看,内容平台如何做好产品与用户的连接及运营实操...
- Document Builder: 如何分析document template里某个字段未被web service填充的问题
- 【接口时序】2、Verilog实现流水灯及与C语言的对比
- Linux上Java的安装与配置,java初级面试笔试题
- RTP发送和接收(有图为证)
- Centos6.5 恢复误删的系统面板
- 【POJ3349】Snowflake Snow Snowflakes(哈希表判重,维护一个集合)
- 激光雷达的KPI与技术方案
- autojs 文件转base64
- 关于wineQQ8.9.19983deepin23版本提升不能在使用请升级,Linux偷懒升级方法
- Smartdrv程序有什么作用
- 操作系统PV编程题目总结一
- 计算机网络原理实验实验七:分析IP报文结构
- 全部就业!最高薪资12.5K,黑马这两个学科好牛!
- 关于电视剧《狂飙》的一点感悟--贵人相助的重要性
- Mac OS X下的动态链接库
- BI神器Power Query(14)-- PQ制作时间维度表(3)
热门文章
- 将keras的h5模型转化为onnx
- bigqury 认证
- bigquery sql 正则表达式
- winform point数组带数值_带你学够浪:Go语言基础系列 - 8分钟学复合类型
- 论文笔记:HKMF-T: Recover From Blackouts in TaggedTime Series With Hankel Matrix Factorization
- leetcode 目录
- MATLAB从入门到精通-机械动力学仿真-Amesim仿真实例:对于任意的外力作用下的机械动力学仿真
- Flink从入门到精通100篇(十)-双亲委派模型与 Flink 的类加载策略
- 数据中台(二)数据质量分析及提升
- 深度学习核心技术精讲100篇(十八)-巨量数据下美团是如何实现数据治理的?