看完秒懂的排序算法

戳蓝字“CSDN云计算”关注我们哦!
640?wx_fmt=jpeg
作者 |  奎哥
责编 | 阿秃

之前的文章咱们已经聊过了
下图是常用排序算法的时间空间复杂度:
640?wx_fmt=png
排序算法这么多,这里先将排序算法做个简单分类:

一、可以根据待排序的数据量规模分类:


  • 内部排序:在排序过程中,待排序的数据能够被全部加载进内存中
  • 外部排序:待排序的数据太大,不能全部同时放入内存,排序过程中需要内存与外部存储交换数据

二、可以根据排序的稳定性进行分类:


  • 稳定性排序:冒泡排序、插入排序、归并排序
  • 不稳定排序:快速排序、选择排序、希尔排序、堆排序

三、可以根据排序时间复杂度分类:


  • O(N):桶排序、计数排序、基数排序
  • O(NlogN):快速排序、希尔排序、归并排序、堆排序
  • O(N*N):冒泡排序、插入排序、选择排序

四、基于算法思想分类:


  • 基于分治:快速排序、归并排序
  • 基于插入:希尔排序、插入排序
  • 基于选择:堆排序、选择排序
  • 基于交换:冒泡排序、快速排序
这些分类其实并没有那么严格,大多都是根据排序算法的特性总结的,不需要记住,搞懂了各种排序的特点之后也就自然而然的理解了。
这么多排序算法,我们应该怎么去评估它们呢?
一般而言,评估一个排序算法的质量主要从以下几个角度去看:
  • 时间复杂度:
    这是衡量算法性能的常规方法,对于排序算法当然也不例外,这也是衡量排序算法最重要的一个指标。在排序算法中常用的操作就是“比较”和“移动”元素,因此我们想优化某个排序算法的时间复杂度就是要减少去“比较”和“移动”元素的次数。
    同时,由于需排序的数据不同会导致即使同一个算法也有着完全不同的时间消耗,因此我们还应该进一步分析排序算法的 最好时间复杂度、最坏时间复杂度,以及平均时间复杂度,以做到对排序算法特性的充分了解。
  • 空间复杂度:
    这个也是评价算法的另一个常规指标。需要分析执行算法所需要的辅助存储空间(原有数据已占用的空间不算)。如果空间复杂度为O(1)则说明执行算法的辅助存储空间为常量级别,很优秀。
    对于「冒泡排序」、「插入排序」、「选择排序」等排序算法的空间复杂度都是O(1)。
  • 排序的稳定性:
    排序的稳定性是一个新的指标,对于排序算法来说非常的重要。
    通俗的来讲就是:假如在待排序的数组中有相等的元素,则经过排序之后,这些相等的元素之间的原有顺序不被改变。
    例如:待排序数组:1,3,6,5,6,2,9,经过从小到大的排序之后为:1,2,3,5,6,6,9
    在原数组里面有2个6,分别位于数组的第二个位置和第四个位置(数组从第0位开始数),在排序后这2个6分为位于数组的第四个位置和第五个位置。注意重点来了,稳定性要求就是指原来那个第二位置的6是在第四个位置的6的前面的,所以排序完成之后,这两个6的相对向后顺序不能有变,因此位于新数组第四个位置的6必须是原来旧数组的第二个位置的那个6,新数组第五个位置的6必须是旧数组时第四个位置的那个6,虽然值一样,但是还是有区别的。你要说有啥区别?那再举个例子吧:
    幼儿园一群小孩排队去领零食,刚开始是杂乱无章的排队的,后来老师说按照年龄大小排队,年龄小的排到前面去,这个时候就可以运用排序算法进行年龄的排序了。可是队伍中有2个同学小张和小赵年龄一样的,本来旧队伍的时候小张是排在小赵前面的,但是如果经过排序算法之后,把小张弄到了小赵的后面,这就不合理了,毕竟他们年龄一样,肯定是刚开始谁在前面就保持原样最好了,这就是体现出算法的稳定性的地方了。
    对排序的稳定性要求是在实际应用中非常常见。
  • 算法的复杂性:
    算法本身的复杂度也会影响算法的性能(这里不是指的时间空间复杂度),这里指的算法设计思想的复杂度,后面我们在学习各种算法的时候就很清楚的看得到有的算法非常简单,有的算法设计的就比较复杂了。像「冒泡排序」、「插入排序」、「选择排序」这类都属于简单排序的算法。
以上,就是对数据结构中「 排序算法 」的一些思考。
640?wx_fmt=png

640?wx_fmt=jpeg

福利
扫描添加小编微信,备注“姓名+公司职位”,入驻【CSDN博客】,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:




真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你创建容器服务Kubernetes集群

Kubernetes作为目前最流行的容器编排工具,被越来越多的用户所接受,目前也有越来越多的用户开始考虑使用Kubernetes集群来部署生产应用。那么,此时用户可能面临一个问题,如何规划和创建合适的Kubernetes集群呢? 接下来的…

Navicat 12 连接oracle闪退问题

#首先查看自己oracle的版本 select * from v$version;然后去官网下载instantclient对应的版本instantclient 我的版本是instantclient-basic-windows.x64-11.2.0.4.0.zip 找到对应版本下载即可 最后解压,将解压的文件instantclient_11_2 直接放到安装Navicat的目录…

python遗传算法计算实例_遗传算法python简单例子(详解)

# -*-coding:utf-8 -*- #目标求解sin(x)最大值 import random import math import matplotlib.pyplot as plt #初始化种群 生成chromosome_length大小的population_size个个体的种群 def species_origin(population_size,chromosome_length): population[[]] #one dimension re…

四个变量的图表怎么做_品牌策划方案怎么做?5步图文帮你绘制专业策划图表...

品牌策划方案是指通过对目标对象、竞争对手等相关数据的收集及详细分析,创造性地提出的区别于其他竞争者,能够体现自身特色的名称或符号,用以识别某款产品。品牌策划方案需要策划人具备以下能力:高瞻远瞩,看得到品牌的…

阿里云开放国内首个云端数据库测试平台,云已成为数据库新标准;华为5G随行WiFi发布;科大讯飞推出 AI 专用语音芯片系列……...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

AWD-LSTM为什么这么棒?

AWD-LSTM是目前最优秀的语言模型之一。在众多的顶会论文中,对字级模型的研究都采用了AWD-LSTMs,并且它在字符级模型中的表现也同样出色。 本文回顾了论文——Regularizing and Optimizing LSTM Language Models ,在介绍AWD-LSTM模型的同时并…

使用Navicat Premium 12 连接远程Oracle数据库

文章目录1. Nacicat premium 12.1.11下载2. 点击【连接】-【ORACLE】3. 输入连接信息异常解决方案1. Nacicat premium 12.1.11下载 Nacicat premium 12.1.11破解版 32/64位 2. 点击【连接】-【ORACLE】 3. 输入连接信息 #连接信息如下: Hostname: 192.168.1.101 …

NLP深度学习:近期趋势概述(一)

在最近发表的论文中,Young及其同事汇总了基于深度学习的自然语言处理(NLP)系统和应用程序的一些最新趋势。本文的重点介绍是对各种NLP任务(如视觉问答(QA)和机器翻译)最新技术(SOTA&…

matlab meshgrid函数_从零开始的matlab学习笔记——(28)立体图切面与三视图

matlab应用——求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图....更多内容尽在个人专栏:matlab学习这一节我们说一说立体图的切面问题slice函数…

NLP深度学习:近期趋势概述(二)

递归神经网络(RNN) RNN是专门用于处理顺序信息的神经网络的方法。RNN将计算应用于以先前计算结果为条件的输入序列。这些序列通常由固定大小的标记向量表示,他们被顺序送至循环单元。下图说明了一个简单的RNN框架。 RNN的主要优势在于能够记…

使用IntelliJ IDEA 2019.3.2 x64 远程连接oracle数据库

登录验证第2种方式: 点击【Database】-【Data Source】-【Oracle】 输入连接信息,点击【Test Connection】-【OK】 Hostname: 192.168.1.101 Port: 1521 Sid: helowin Username: system Password: oracle 注释:第一次应该会下载客户端依赖&…

起底中国 IT 发展 20 年!

戳蓝字“CSDN云计算”关注我们哦!作者 | 马超责编 | 阿秃刚开始撰写此文时恰逢我结婚10周年纪念日,暮然回首,我突然发现第一款浏览器Worldwideweb出现在1990年,Java与Python都诞生于1994年,甚至被沿用至今的Visual st…

TableStore发布多元索引功能,打造统一的在线数据平台

什么是NoSQL “NoSQL”一词最早出现在1998年,距今刚好二十年。站在今天回头看的话,很少有人能想到在关系型数据库成熟发展了三十年,已经在数据存储领域占据了不可动摇的的地位后,NoSQL数据库尽然还可以快速地异军突起&#xff0c…

阿里是如何“宠”员工的?除了福利,还有这满屏黑科技

分散在世界各地的六万阿里员工是如何快速协同工作的? 在2018年杭州云栖大会现场,一块近4米宽的企业信息化大屏上,展示了全球阿里员工1天的云上办公与连接情况。 目前阿里巴巴的办公网络与音视频会议已经覆盖全球33个国家和地区,其…

里用gam使用_第一次使用Roam一头雾水?

有感于自己使用Chrome插件,自己看了官方文档也是一头雾水的状态,想到自己使用的Roam Research,用了好几个月也是不断摸索的,记录下使用Roam Research方法供新手们参考。工具的使用是简单的,但是看着详尽的工具文档和使…

使用PLSQL 远程连接oracle数据库

文章目录一、软件下载准备1. 下载PLSQL客户端2. 下载instantclient 客户端3. 将解压instantclient复制到PLSQL目录下面二、配置oracle监听2.1. 首先进入oracle内部2.2. 找到这个文件的目录2.3. 将tnsnames.ora文件从容器内部复制到宿主机上2.4. 再从linux服务器上将文件下载到w…

面试官:知道你的接口QPS是多少么?

戳蓝字“CSDN云计算”关注我们哦!作者 | 孤独烟责编 | 阿秃引言大家好,我是渣渣烟。我又来水文章了。这篇文章我个人感觉含金量不是太大,大概5分钟左右就能看完!其实大家都知道,我不爱写这种操作型的文章,…

Module 让 Terraform 使用更简单

众所周知,Terraform 是一个开源的自动化的资源编排工具,支持多家云服务提供商。阿里云作为第三大云服务提供商,terraform-alicloud-provider 已经支持了超过 90 多个 Resource 和 Data Source,覆盖20多个服务和产品,吸…

android java 实体类 object变量 保存_Java中的实体类--Serializable接口、transient 关键字...

在java中,实体类是一个非常重要的概念,我们可以在实体类中封装对象、设置其属性和方法等。关于实体类,也经常涉及到适配器模式、装饰者模式等设计模式。那么在实际代码开发中,关于实体类的注意事项有哪些呢?1. Seriali…

杭州云栖大会阿里云放大招,8K远程医疗会诊引关注

大家每天都会照镜子,镜子里的一切都清清楚楚,足可乱真,可是你想过有一天看视频直播就像照镜子么? 这不,在云栖大会的C馆里,8K超高清直播体验馆前异常火爆,在这里,很多参会者都围着有…