时间复杂度是指程序执行函数或方法的效率常用大写的O表示,比如执行一个循环我们记做O(n),执行一个加法运算或者执行一个if操作我们记为O(1)​。

时间、空间复杂度比较

1 冒泡排序

算法思想

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序动图演示

代码:

2 选择排序

算法思想

  1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

  2. 从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾

  3. 以此类推,直到所有元素均排序完毕

选择排序动图演示

代码:

3 插入排序

算法思想

  1. 从第一个元素开始,该元素可以认为已经被排序

  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描

  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置

  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

  5. 将新元素插入到该位置后

  6. 重复步骤2~5

插入排序动图演示

代码:

4 快速排序

算法思想

  1. 选取第一个数为基准

  2. 将比基准小的数交换到前面,比基准大的数交换到后面

  3. 对左右区间重复第二步,直到各区间只有一个数

快速排序动图演示

代码:

5 堆排序

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

算法思想

  1. 将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;

  2. 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n];

  3. 由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,……Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成。

代码:

6 归并排序

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2路归并。

算法思想:1.把长度为n的输入序列分成两个长度为n/2的子序列;2. 对这两个子序列分别采用归并排序;3. 将两个排序好的子序列合并成一个最终的排序序列。

归并排序动图演示

代码:

7 希尔排序

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序.

算法思想

  1. 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;

  2. 按增量序列个数k,对序列进行k 趟排序;

  3. 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

希尔排序动图演示

代码:

8 计数排序

计数排序统计小于等于该元素值的元素的个数i,于是该元素就放在目标数组的索引i位(i≥0)。

  • 计数排序基于一个假设,待排序数列的所有数均为整数,且出现在(0,k)的区间之内。

  • 如果 k(待排数组的最大值) 过大则会引起较大的空间复杂度,一般是用来排序 0 到 100 之间的数字的最好的算法,但是它不适合按字母顺序排序人名。

  • 计数排序不是比较排序,排序的速度快于任何比较排序算法。

算法思想

  1. 找出待排序的数组中最大和最小的元素;

  2. 统计数组中每个值为 i 的元素出现的次数,存入数组 C 的第 i 项;

  3. 对所有的计数累加(从 C 中的第一个元素开始,每一项和前一项相加);

  4. 向填充目标数组:将每个元素 i 放在新数组的第 C[i] 项,每放一个元素就将 C[i] 减去 1;

计数排序动图演示

代码:

9 桶排序

将值为i的元素放入i号桶,最后依次把桶里的元素倒出来。

算法思想

  1. 设置一个定量的数组当作空桶子。

  2. 寻访序列,并且把项目一个一个放到对应的桶子去。

  3. 对每个不是空的桶子进行排序。

  4. 从不是空的桶子里把项目再放回原来的序列中。

桶排序动图演示

代码:

10 基数排序

一种多关键字的排序算法,可用桶排序实现。

算法思想

  1. 取得数组中的最大数,并取得位数;

  2. arr为原始数组,从最低位开始取每个位组成radix数组;

  3. 对radix进行计数排序(利用计数排序适用于小范围数的特点)

基数排序动图演示

代码:

十大经典排序算法(动态演示+代码)相关推荐

  1. 十大经典排序算法(附代码、动画及改进方案)

    前言说明 十大排序算法可以说是每个程序员最早接触的也是最重要的算法,这一块必须要非常熟练的掌握,应该要理解每种排序的思想,对各个排序的性能的了解也是基础且重要的.为了方便自己和大家学习,决定整合成一篇 ...

  2. 利用Python实现十大经典排序算法(附代码流程)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:hustcc 来源:https://github.com/hustcc/JS ...

  3. 十大经典排序算法动画演示

    文章目录 概述 1.Sorting Algorithms Animations 2.算法的分类 3.时间复杂度 算法 1.冒泡排序 2.快速排序 3.直接插入排序 4.选择排序 5.归并排序 6.堆排 ...

  4. 十大经典排序算法(动图演示)(转)

    十大经典排序算法(动图演示) 本文转自https://www.cnblogs.com/onepixel/articles/7674659.html 0.算法概述 0.1 算法分类 十种常见排序算法可以 ...

  5. C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】

    十大经典排序算法系列博客-->传送门 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均 ...

  6. 十大经典排序算法详细总结 图形展示 代码示例

    文章目录 十大经典排序算法详细总结 0.排序算法说明 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.希尔排序( ...

  7. 十大经典排序算法及比较与分析 ( 动画演示 ) ( 可视化工具 )

    可视化工具及动画展示:旧金山大学 (usfca)|数据结构可视化工具 排序算法概念及描述:1.0 十大经典排序算法(文章部分内容引用自改文章) 参考:邓俊辉 的数据结构 本文未对排序算法概念进行详细说 ...

  8. 算法 - 十大经典排序算法(动图演示)

    [TOC] 算法 - 十大经典排序算法(动图演示) ​ 在计算机科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串资料依照特定排序方式进行排列的一种算法.最常用到的排 ...

  9. 11月14日云栖精选夜读 | 动画+原理+代码,解读十大经典排序算法

    排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过 ...

最新文章

  1. AI工程的实践者:普元积极将场景落地,为企业提供智能化解决方案
  2. 安全应用与管理 中国安防下一个十年
  3. 硬件三人行-开关电源学习笔记-1
  4. java 泛型集合 json_将泛型集合转换成分页json数据
  5. struts2常见错误及解决总结
  6. promise的状态以及api介绍_Promise从入门到自定义 | 尚硅谷Promise新版视频发布!
  7. go 安装墙外的依赖包报错问题
  8. c语言 将url图片存到本地_python爬虫:爬取男生喜欢的图片
  9. 调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)
  10. MIPS汇编实现冒泡排序法
  11. Android开发之Scroller
  12. redis于spring整合之RedisTemplate
  13. 【weiphp微信开发教程】留言板插件开发详解
  14. 一点Python学习资源
  15. 分治法( Divide and Conquer)
  16. python端口扫描工具_基于Python的简易端口扫描器
  17. FFMPEG音视频解码流程MP4音视频文件流读取(转)
  18. 坚果nuts 加速 官网_坚果 R2 发布:骁龙 865、1 亿像素、双曲面屏,售价 4499 元...
  19. 反向题在测试问卷信效度_运动员积极心理品质结构模型与问卷信效度
  20. codeforces228A Is your horseshoe on the other hoof?(水题)

热门文章

  1. 浅析libcurl多线程安全问题
  2. Windows消息机制以及相关API
  3. LeetCode 215 数组中的第K个最大元素
  4. Shell sed命令,替换文件内容、替换目录下所有文件内容、读取文件内容
  5. asp微信会员卡管理系统,超小的源码_带asp微信支付源码
  6. Qt 安装与配置记录
  7. Linux笔记-nohup和
  8. FirstDjangoWebApp-1
  9. Hive 元数据库表信息
  10. PHP文件操作的经典案例