学习排序算法,我们除了学习它的算法原理、代码实现之外,更重要的是要学会如何评价、分析一个排序算法。那分析一个排序算法,要从哪几个方面入手呢?

排序算法的执行效率

对于排序算法执行效率的分析,我们一般会从这几个方面来衡量:

1. 最好情况、最坏情况、平均情况时间复杂度
我们在分析排序算法的时间复杂度时,要分别给出最好情况、最坏情况、平均情况下的时间复杂度。除此之外,你还要说出最好、最坏时间复杂度对应的要排序的原始数据是什么样的。

为什么要区分这三种时间复杂度呢?第一,有些排序算法会区分,为了好对比,所以我们最好都做一下区分。第二,对于要排序的数据,有的接近有序,有的完全无序。有序度不同的数据,对于排序的执行时间肯定是有影响的,我们要知道排序算法在不同数据下的性能表现。

2. 时间复杂度的系数、常数 、低阶

我们知道,时间复杂度反映的是数据规模 n 很大的时候的一个增长趋势,所以它表示的时候会忽略系数、常数、低阶。但是实际的软件开发中,我们排序的可能是 10 个、100 个、1000 个这样规模很小的数据,所以,在对同一阶时间复杂度的排序算法性能对比的时候,我们就要把系数、常数、低阶也考虑进来

3. 比较次数和交换(或移动)次数
这一节和下一节讲的都是基于比较的排序算法。基于比较的排序算法的执行过程,会涉及两种操作,一种是元素比较大小,另一种是元素交换或移动。所以,如果我们在分析排序算法的执行效率的时候,应该把比较次数和交换(或移动)次数也考虑进去。

排序算法的内存消耗

我们前面讲过,算法的内存消耗可以通过空间复杂度来衡量,排序算法也不例外。不过,针对排序算法的空间复杂度,我们还引入了一个新的概念,原地排序(Sorted in place)。原地排序算法,就是特指空间复杂度是 O(1) 的排序算法

排序算法的稳定性

仅仅用执行效率和内存消耗来衡量排序算法的好坏是不够的。针对排序算法,我们还有一个重要的度量指标,稳定性。这个概念是说,如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变

总结

  • 时间复杂度,空间复杂度,稳定性

如何分析一个“排序算法”?相关推荐

  1. 34.写一个排序算法1-100随机数字进行排序

    编程题目: 34.写一个排序算法 1-100随机数字 进行排序,要求效率. 示例代码: package program.calculation.exercise34;/*** 34.写一个排序算法 1 ...

  2. 【算法设计与分析】排序算法性能分析

    github:项目地址 一.实验目的 掌握选择排序.冒泡排序.合并排序.快速排序.插入排序算法原理 掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性. 二.实验概述 排序问题要求 ...

  3. 分析各种排序算法的优劣

    八种常见排序算法 1.选择排序:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完. 2.直接插入排序:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已 ...

  4. distinct 排序_自己造一个排序算法

    1.朴素的DIY排序 DIY 公式解读: rankx_table :造一个需要参考表,有两列,一列是[品牌],另一列是品牌的销量 VAR x : 获得当前上下文[品牌](指表格的行)的销量[sum o ...

  5. 2022搜狐校园 情感分析 × 推荐排序 算法大赛 baseline

    比赛链接:https://www.biendata.xyz/competition/sohu_2022/ 完整代码 可关注ChallengeHub 回复"搜狐"即可获取 赛题背景 ...

  6. 写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组。(提示:不能使用系统已有函数,另外请仔细回忆以前学习过的 基础知识)...

    //冒泡排序(数组排序) function bubble_sort($array) {$count = count($array);if ($count <= 0) return false;f ...

  7. 归并排序执行次数_肯定能懂的常见算法讲解(1)——排序算法

    我叫水水,很高兴认识大家! 这是专栏的第七篇文章.其实本专题已经在我的公众号(公众号中不只有学习专题,还有很多大学学习资源分享.工具分享等等,文末有相关指路哦,欢迎关注撒~[微信搜索"Cod ...

  8. java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析

    0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...

  9. 万字详解|手撕 9大排序算法!

    0. 前言 大家好,我是多选参数的程序锅,一个正在捣鼓操作系统.学数据结构和算法以及 Java 的失业人员.数据结构和算法我已经学了有一段日子了,最近也开始在刷 LeetCode 上面的题目了,但是自 ...

最新文章

  1. 电梯维修属于什么服务器,电梯维修属于建筑服务中的修缮服务吗?
  2. 为工厂分配用于公司间Invoice的销售范围
  3. Codeforces Round #491 (Div.2)
  4. 记一次 Vue2 迁移 Vue3 的实践总结
  5. no such file or directory什么意思_为什么这次 MySQL 崩溃恢复要这么久-爱可生
  6. java camel swagger,Swagger将下划线转换为camelcase
  7. JAVA清稿word_java开发实现word在线编辑及流转
  8. 如何将秘钥分发到多台机器
  9. Everyone Piano键盘钢琴软件
  10. 为什么高斯滤波器被广泛用于图像处理?
  11. 实用工具篇--华为eNSP下载及安装
  12. 类型函数(type function)
  13. Guitar Pro 8win10最新版吉他学习 / 打谱 / 创作
  14. 传祺gac6480_传祺gs82020款,传祺GAC6480J2F5
  15. 正点原子IMX6ULL开发板禁用出厂QT界面
  16. 很酷的智能家居/工业路由器两用的物联网WiFi模块 MQTT/TCP协议 MIPS+LINUX+Openwrt技术覆盖
  17. wps word打开是html,用Word打开WPS文件的两种方法,WPS文件如何打开?
  18. 大白话理解德摩根定律(De Morgan‘s Laws)
  19. lucene geohash 在外卖场景中,商家不规则多边形配送范围技术应用
  20. 【版本管理】软件项目版本号的命名规则及格式

热门文章

  1. 人脸方向学习(十八):Face Landmark Detection-SAN-解读
  2. Systemd 入门教程:命令篇、实战篇
  3. php的闭包函数bingto_php的闭包
  4. pythondocx更新目录_python根目录
  5. 基础03String类、static、Arrays类、Math类
  6. git遇到的错误集锦及解决方法
  7. Linux下头文件.h的使用
  8. multipartfile 获取文件路径_Excel工作表中的20个信息函数,获取文件路径,单元格格式等!...
  9. mysql时间加8小时_劳斯莱斯库里南,超精致1:8模型车,组装时间长达450个小时...
  10. linux下esc退不出vi