1. 快速排序

  • 分治思想
  • 不稳定
  • 时间复杂度:最差O(n^2),平均O(nlogn)
  • 空间复杂度:O(n+1)
  • 每次排序设置一个基准点,小于等于基准点的数放到基准点左边,大于等于基准点的数放到基准点右边。

2. 堆排序

  • 完全二叉树
  • 不稳定
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1)
  • 过程:1、初始化堆,从最后一个非叶节点开始调整,将R[0, ..., n-1]构造为堆(交换过程要检查是否保持大/小顶堆性质)2、将当前无序区的堆顶元素R[0]同该区间的最后一个记录交换,然后将新的无序区间调整为新的堆。

3. 冒泡排序

  • 稳定
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。

4. 插入排序

  • 稳定
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 插入排序非常类似于整理扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。

5. 选择排序

  • 不稳定
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。

6. 归并排序

  • 稳定
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(n)
  • 示意图(图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园)

7. 希尔排序

  • 不稳定
  • 时间复杂度O(nlogn)~O(n^2)
  • 空间复杂度O(1)
  • 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序。该方法的基本思想是:把记录按步长 gap 分组(初始gap=n/2),对每组记录采用直接插入排序方法进行排序。随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到1时,整个数据合成为一组,构成一组有序记录,则完成排序。
  • https://blog.csdn.net/qq_39207948/article/details/80006224

8. 桶排序

  • 稳定
  • 时间复杂度:O(n+nlogn-nlogm),m为桶数
  • 空间复杂度:O(n+m)
  • 如果相对于同样的N,桶数量M越大,其效率越高,最好的时间复杂度达到O(N)。当然桶排序的空间复杂度为O(N+M),如果输入数据非常庞大,而桶的数量也非常多,则空间代价无疑是昂贵的。
  • 示意图(【图解数据结构】 一组动画彻底理解桶排序)

9. 其他

内排序:在排序过程中,所有元素调到内存中进行的排序,称为内排序。内排序是排序的基础。内排序效率用比较次数来衡量。按所用策略不同,内排序又可分为插入排序、选择排序、交换排序、归并排序及基数排序等几大类。

外排序:在数据量大的情况下,只能分块排序,但块与块间不能保证有序。外排序用读/写外存的次数来衡量其效率。

快速排序图解_排序算法相关推荐

  1. 交换排序图解_排序算法学习分享(二)交换排序---冒泡排序与快速排序

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! (一)排序的分类 排序算法 ...

  2. 交换排序图解_排序算法(一):初级比较排序

    排序算法,作为算法中最基础的一部分.其中很多思想值得我们学习借鉴,故有必要了解.掌握一些常见常用的排序算法.排序算法根据是否使用比较元素的思想,可分为两大类:比较排序.非比较排序.本文,我们将对比较排 ...

  3. 实现快速排序的算法_排序算法-快速排序

    快速排序是由东尼霍尔所发展的一种排序算法.在平均n个项目要Ο(nlogn) 次比较.在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见.事实上,快速排序通常明显比其他 Ο(nlogn) 算法更 ...

  4. 程序填充(指针):3数排序_排序算法之快速排序,它为什么这么快?

    本文将介绍排序算法中最常用,以及最重要的快速排序. 1 快速排序实例 快速排序由C. A. R. Hoare在1960年提出,是冒泡排序的一种改进.快速排序就跟它的名字一样,效率很快.跟冒泡排序,选择 ...

  5. 快速排序 java导包_排序算法-快速排序(Java实现)

    上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...

  6. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  7. 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...

  8. 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)

    本文链接:https://blog.csdn.net/onceing/article/details/99838520 冒泡排序介绍 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序. ...

  9. python语言基本排序算法_排序算法(Python)

    参考: <数据结构(Python 语言描述)> - 3.4 基本排序算法.3.5 更快的排序 Tips:为了保持简洁,每个函数都只处理整数列表,并且假设列表不为空. 目录.jpg 术语 1 ...

最新文章

  1. Python中字符串的截取,列表的截取
  2. java hasfocus_Java KeyEvent.hasNoModifiers方法代碼示例
  3. LeetCode 题解之Add Two Numbers II
  4. 计算机还是数学竞赛内容吗,除了AMC,数学牛娃还能参加什么高含金量的数学竞赛...
  5. 『软件工程13』浅谈面向对象方法,统一建模语言UML
  6. ivona tts语音合成引擎_高端玩家!树莓派 + Node.js 实现语音机器人
  7. bootstrap-table使用 带条件查询翻页及数据更新的问题。
  8. Enterprise Library 系列教程
  9. mybatis update返回值的意义
  10. Dubbo服务服务暴露之ProxyFactory Invoker
  11. 参数等效模型可以用于_扬声器单元的等效电路分析与应用(1)
  12. c51单片机时钟程序汇编语言,51单片机数字钟汇编程序精选.docx
  13. 【C#进阶3-4】C#设计模式
  14. 【AVR单片机】【Microchip Studio】01项目创建
  15. c语言常见运行错误提示,c语言运行时的错误提示
  16. 优雅的处理Exception
  17. CSS3简明教程-1.1.CSS3是什么
  18. 网页自动弹出js——你懂的
  19. IT30知识星球—工作报告7步曲
  20. [C/C++]华为8-19笔试题

热门文章

  1. 窃取任意GitHub Actions敏感信息如此简单,只需要分支改个名?
  2. AI算力的阿喀琉斯之踵:内存墙
  3. 读源码搞懂为什么Redis用单线程还这么快
  4. 程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条...
  5. 人工智能方向改变,图灵测试是否已过时?
  6. JavaScript 霸榜、TypeScript 爆发、开源吞噬世界,GitHub 年度报告正式发布!
  7. 面试常考,项目易错!C/C++中的字节对齐
  8. 被遗忘的 Mozilla?
  9. 到底什么是“云网融合”?
  10. 7 面阿里,终获 Offer《原力计划【第二季】》第 9周周榜揭晓!!!