排序算法有多少种

人们常用的排序方法主要有10种,包括:1、冒泡排序;2、选择排序;3、插入排序;4、归并排序;5、快速排序;6、堆排序;7、希尔排序;8、计数排序;9、桶排序;10、基数排序。

冒泡排序

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

选择排序

选择排序是一种简单直观的排序算法,它也是一种交换排序算法,和冒泡排序有一定的相似度,可以认为选择排序是冒泡排序的一种改进。

插入排序

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

归并排序

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

快速排序

快速排序是一个知名度极高的排序算法,其对于大数据的优秀排序性能和相同复杂度算法中相对简单的实现使它注定得到比其他算法更多的宠爱。

堆排序

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆排序就是把最大堆堆顶的最大数取出,将剩余的堆继续调整为最大堆,再次将堆顶的最大数取出,这个过程持续到剩余数只有一个时结束。

希尔排序(插入排序的改良版)

在希尔排序出现之前,计算机界普遍存在“排序算法不可能突破O(n2)”的观点。希尔排序是第一个突破O(n2)的排序算法,它是简单插入排序的改进版。希尔排序的提出,主要基于以下两点:

1、插入排序算法在数组基本有序的情况下,可以近似达到O(n)复杂度,效率极高。

2、但插入排序每次只能将数据移动一位,在数组较大且基本无序的情况下性能会迅速恶化。

计数排序

计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

桶排序

桶排序又叫箱排序,是计数排序的升级版,它的工作原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的合并起来。

基数排序

基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。

排序过程:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

延伸阅读:

排序算法的评价标准

稳定性是一个特别重要的评估标准。稳定的算法在排序的过程中不会改变元素彼此的位置的相对次序,反之不稳定的排序算法经常会改变这个次序,这是我们不愿意看到的。我们在使用排序算法或者选择排序算法时,更希望这个次序不会改变,更加稳定,所以排序算法的稳定性,是一个特别重要的参数衡量指标依据。就如同空间复杂度和时间复杂度一样,有时候甚至比时间复杂度、空间复杂度更重要一些。所以往往评价一个排序算法的好坏往往可以从下边几个方面入手:

1、时间复杂度

即从序列的初始状态到经过排序算法的变换移位等操作变到最终排序好的结果状态的过程所花费的时间度量。

2、空间复杂度

就是从序列的初始状态经过排序移位变换的过程一直到最终的状态所花费的空间开销。

3、使用场景

排序算法有很多,不同种类的排序算法适合不同种类的情景,可能有时候需要节省空间对时间要求没那么多,反之,有时候则是希望多考虑一些时间,对空间要求没那么高,总之一般都会必须从某一方面做出抉择。

4、稳定性

稳定性是不管考虑时间和空间必须要考虑的问题,往往也是非常重要的影响选择的因素。

本文来自投稿,不代表Worktile社区立场,如若转载,请注明出处:https://worktile.com/kb/p/30524

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年10月17日 上午1:19
下一篇 2022年10月17日 上午1:43

相关推荐

  • 研发项目的管理流程有哪些

    研发项目的管理流程包括以下几个阶段:1、产品研发规划阶段;2、设计、试制、试验、定型阶段;3、生产技术准备阶段;4、小批试生产阶段;5、批量生产阶段。研发管理是指对研发或技术部门及其工作进行管理,重点是产品开发及测试过程。 1、产品研发规划阶段 公司最高决策层根据客户的要求和市场预测确定新产品的发展…

    2022年11月14日
    10000
  • 效能管理包括哪些方面

    企业效能从内容上说,效能管理包括效率和效益高低的现实性指标、效率和效益提升的潜在性指标两大方面。效能管理可反映出达成最大产出、预定目标或是最佳营运服务的程度。而效益高低并不完全等同效能的高低。 企业效能从内容上说,包括效率和效益高低的现实性指标、效率和效益提升的潜在性指标两大方面。可反映出达成最大产…

    2022年11月6日
    7900
  • linux远程连接工具有哪些

    linux远程连接工具有以下几个:1、Xshell;2、SecureCRT;3、WinSCP;4、PuTTY;5、MobaXterm;6、FinalShell。Xshell是一个非常强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Windows 平台的 TELNET 协议。 1、Xsh…

    2022年12月31日
    4200
  • 神州数码集团CIO沈旸:最佳实践模式正在失灵,开源加速分布式创新

    国防科学技术大学工学学士学位、上海交通大学工学硕士学位。曾任SAP中国全球支持中心咨询顾问、SAP美国数字转型服务部门技术架构师、企业规划与商业智能团队负责人、神州数码控股有限公司首席信息官。 文 | babayage 编辑 | 笑 笑 在与沈旸的交流中,感受到他有一种独特的“疏…

    2022年6月11日
    6100
  • c2c开源系统有哪些

    常用的c2c开源系统有以下几个:1、ECSHOP电商系统;2、MAGENTO电商系统;3、V5SHOP电商系统;4、OPENCART电商系统。ECSHOP电商系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源电商系统, ECSHOP开源的电商系统最大的特色之一是功能健全。 1、ECSHOP电…

    2023年1月6日
    1200
  • Kotlin作为Android开发语言相比传统Java有什么优势

    Kotlin作为Android开发语言相比传统Java的优势有:1、将语言特性的发展与jvm虚拟机脱钩;2、新语言可以避免背上历史包袱;3、kotlin提供了一些新的库。Kotlin基于jvm,但不依赖高版本jvm,kotlin可以在保持jvm1.8前提下不断迭代新的语言特性,跟进现代的编程语言发展…

    2023年1月27日
    500
  • 并发编程语言有哪些

    并发编程语言有:1、单进程解释语言;2、共享内存的多线程语言;3、Erlang;4、Golang。单进程解释语言包括python, ruby, node.js等,这类解释语言通常提供极高的开发效率,和相对较差的执行效率,在多核与并发的世界,它们不提供任何支持。 1、单进程解释语言 单进程解释语言包括…

    2023年1月11日
    1500
  • 哪些办公软件属于微软的

    属于微软的办公软件有:1、Word;2、Excel;3、PowerPoint;4、Outlook;5、Onenote。Word是指,微软公司的一个文字处理器应用程序,给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。 1、Word Microsoft Office W…

    2023年1月13日
    1100
  • 什么是恐吓软件

    恐吓软件是一种恶意软件,可以欺骗计算机用户访问被恶意软件感染的网站。恐吓软件也被称为欺骗软件、流氓扫描软件或欺诈软件,可以弹窗形式出现。这些显示为来自防病毒软件公司的合法警告,声称您的计算机文件已被感染。 什么是恐吓软件 恐吓软件是一种恶意软件,可以欺骗计算机用户访问被恶意软件感染的网站。恐吓软件也…

    2022年11月7日
    3600
  • root需要哪些文件系统

    root需要以下文件系统:1、ramfs文件系统;2、nfs文件系统。ramfs文件系统比较简单,只需将制作好的busybox目录在内核config文件中指定一下就可以了。ramfs 是基于缓存的文件系统。所以ramfs去除了块设备的一些限制ramfs根据其中包含的文件大小可以自由伸缩。 1、ram…

    2023年1月11日
    500

发表回复

登录后才能评论
联系我们
关注微信
关注微信
分享本页
返回顶部
PingCode 比 Jira 更好用的研发管理工具。免费试用