八大排序算法、稳定性及时间复杂度

2023-05-16

①、什么是稳定性?

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

②、什么是时间复杂度?

计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。

1、直接插入排序

在插入第i个记录时,R1,R2,R3...Rn已经排好序,这时将Ri的关键字ki依次与关键字ki-1,ki-2进行比较,从而找到插入的位置。

从图可以看出,插入排序是从第一个元素开始,进行两两比较,把小的放到前面。

如果碰到一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序并没有发生变化,所以插入排序是稳定的。

时间复杂度:O(n²)

2、冒泡排序

从序列的最后一位开始,两两比较,每当两相邻的数比较后,发现它们的排序与要求的排序相反时,就将他们互换。

从图可以看出, 冒泡排序是从最后一个元素开始的,进行两两比较。遇到相同的元素时,便放到相同元素的后面,所以此排序也是稳定的。

时间复杂度与插入排序一样O(n²)

3、简单选择排序

在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换,然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,以此类推,直到倒数第二个与倒数第一个比较为止。

在此排序方法中,相同的两个数顺序可能会被调换,所以此排序不稳定

时间复杂度: O(n²)

4、希尔排序(缩小增量排序)

先将整个待排序的记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,在对全体记录进行依次直接插入排序。

由图可以看出,重复的数据49前后顺序转换,所以该排序是不稳定的。

时间复杂度为:O(n的1.3次方)

5、快速排序

第一步:在待排序的n个记录中任取一个记录,以该记录的排序码为准,将所有记录都分成两组,第一组都小于该数,第2组都大于该数,如图所示。

第二步:采用相同的方法对左右两组分别进行排序,知道所有记录都排到相对应的位置为止。

该算法的排序过程是二叉树过程,所以时间复杂度为O(nlogn)

因为是前后快速排序,所以不稳定

6、堆排序


堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足

时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。
若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(或不小于)其子女的值,根结点(堆顶元素)的值是最小(或最大)的。如:
(a) 大顶堆序列:(96, 83,27,38,11,09)
(b) 小顶堆序列:(12,36,24,85,47,30,53,91)

 该排序的时间复杂度O(nlogn),不稳定

7、归并排序

所谓“归并”是将两个或两个以上的有序文件合并成为一个新的有序文件。

归并排序时间复杂度为O(nlogn),不稳定

8、基数排序

 借助多关键字排序思想对单逻辑关键字进行排序的方法。基础排序不是基于关键字比较的排序方法,它适合于元素很多而关键字较少的排序。基数的选择和关键字的分解是根据关键字的类型来决定的。例如关键字是十进制数,则按个位、十位来分解。

概述:

①、稳定性判断:

从前往后或者从后往前,逐一(两两)进行比较的排序算法都具有稳定性的特征,如:冒泡排序,插入排序,基数排序,归并排序。

而较快比较出来的算法往往是不稳定的,如:快速排序,简单选择排序,堆排序,希尔排序。

②、时间复杂度判断:

涉及到两两递归或二叉树的排序时间复杂度为O(nlogn),如堆排序,归并排序,快速排序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

八大排序算法、稳定性及时间复杂度 的相关文章

  • Redis集群添加数据报错(error) CLUSTERDOWN The cluster is down

    连接到Redis集群 xff0c 添加向集群中添加数据 xff0c 出现如下错误 xff1a error CLUSTERDOWN The cluster is down 我上网上查了查 xff0c 发现导致这个错误的原因很多 xff0c 这
  • Ubuntu 22.04.2 LTS点云PCL库的安装

    先简单说明一下我的病情 xff0c 我的Ubuntu版本是22 04 xff0c 在没有安装点云之前就已经安装的QT5和Anaconda的运行环境 开始的时候我是通过直接apt安装PCL库的 xff0c 但是有点问题 xff0c 跑网上给的
  • Android_Google Pay的添加使用

    虽然国内的支付宝 微信支付这么火热 但是我们在国外开发的时候 免不了还是会遇到使用Google Pay的时候 一 注册您的应用程序 你必须注册通过API控制台访问谷歌API的所有应用程序 注册过程导致了一组已知只有谷歌和你的应用程序 xff
  • 素数的几种判断方法总结(含C++代码)

    素数的几种判断方法总结 xff08 含C 43 43 代码 xff09 一 素数定义二 素数判断方法1 定义法2 定义法改进3 取模法5 筛选法改进 三 总结 一 素数定义 素数 xff08 prime number xff09 xff0c
  • [Python黑帽] 三.编程实现IP及端口扫描器、实现多线程C段扫描器

    Python黑帽第三篇文章将分享网络扫描基础知识 xff0c 编程实现IP及端口扫描器 实现多线程C段扫描器 本文参考了 Python绝技 书籍和i春秋ADO老师的课程内容 xff0c 这里真心推荐大家去学习ichunqiu课程 xff0c
  • [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解

    欢迎大家来到 Python从零到壹 xff0c 在这里我将分享约200篇Python系列文章 xff0c 带大家一起去学习和玩耍 xff0c 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 xff0c 真心想把自
  • [Python从零到壹] 六.网络爬虫之BeautifulSoup爬取作者个人博客网站详解

    欢迎大家来到 Python从零到壹 xff0c 在这里我将分享约200篇Python系列文章 xff0c 带大家一起去学习和玩耍 xff0c 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 xff0c 真心想把自
  • Android Q 上的Biometric生物识别

    生物识别架构 Android Q版本不再使用相对独立的指纹识别或是人脸识别板块 xff0c 而是转而使用一个相对大的笼统的架构 就是生物识别 Biometric xff0c 基于生物特征的因素允许在平台上进行安全身份验证 xff0c 目前在
  • Android Q 上的Biometric生物识别之Face人脸识别流程

    第一部分 xff0c 人脸识别身份验证HIDL 借助人脸识别身份验证功能 xff0c 用户只需要将自己的面孔对准设备即可将其解锁 Android 10 增加了对一种新的人脸识别身份验证堆栈的支持 xff0c 这种堆栈可安全处理摄像头帧 xf
  • PHP 扩展与 ZEND 引擎的整合

    PHP 扩展是对 PHP 功能的一个补充 xff0c 编写完 PHP 扩展以后 xff0c ZEND 引擎需要获取到 PHP 扩展的信息 xff0c 比如 phpinfo 函数是如何列出 PHP 扩展的信息 xff0c PHP 扩展中的函数
  • 【米哈游】2022春季校园招聘

    作者 xff1a 咖喱吉吉 链接 xff1a 米哈游 2022春季校园招聘网申开始啦 xff01 校园大使内推 招聘信息 牛客网 来源 xff1a 牛客网 在这里有超多业界顶尖游戏制作大牛 xff0c 等你一起来创作最激动人心的面向未来的产
  • thymeleaf在SpringBoot中的配置

    spring boot使用thymeleaf版本问题 Spring boot默认使用的是thymeleaf的2版本 xff0c 这个版本比较低 xff0c 有些功能不支持 xff0c 需要切换成3版本 thymeleaf在版本中的配置 xf
  • 内存分配函数

    1 malloc 函数 xff1a void malloc unsigned int size 在内存的动态分配区域中分配一个长度为size的连续空间 xff0c 如果分配成功 xff0c 则返回所分配内存空间的首地址 xff0c 否则返回
  • powershell美化

    前言 重装系统后 xff0c 又用到了那个无比丑陋的powershell xff08 bushi xff09 还是之前通过oh my posh美化过的好看 但是跟着网上的好多教程都没有美化成功 xff0c 都是说什么oh my posh 无
  • shell调用自定义函数及传参

    1 单个参数 bin bash function LoopPrint count 61 0 while count lt 1 do echo count let 43 43 count sleep 1 done return 0 read
  • 虚拟机 怎么进入到命令方式

    一般启动虚拟机 进入到的页面是这样的 xff1a 1 快捷键 xff1a Ctrl 43 Shift 43 F5切换到命令登陆界面 或者ctrl 43 alt 43 f5 2 快捷键 xff1a Ctrl 43 Shift 43 F1切换到
  • Android的环境搭建、内核和源码build

    Android源代码下载和编译 xff1a http source android com source initializing html 按照官方指导 xff0c 成功Build xff01 Android开发环境的搭建 xff1a h
  • 2017秋招求职历程总结

    2017秋招求职历程总结 从小的梦想就是有朝一日能够进入汽车行业工作 xff0c 很幸运刚毕业的第一份工作便实现了此梦想 xff0c 感谢大学遇到的那些人 终于在国庆之前拿到了一份还算满意的offer 9月1号从实习单位离职准备接下来的秋招
  • springcloud如何搭建支付宝pay-service微服务

    文章目录 小提示逻辑图配置pom xmlpay service dev yamlbootstrap yml 开搞AlipayPropertiesAlipayConfig控制器各接口代码演示所对应的封装对象PayVo支付接口参数对象Refun
  • 阿里巴巴常用的 12 个后端开发工具

    从手动编码到自动化 xff0c 从重复工作到创新 xff0c 开发人员工具随着技术的发展而不断发展 阿里巴巴集团和阿里巴巴云已通过开源发布和基于云的实施向公众提供其技术 通过在各种业务场景中的多年开发积累了这些技术 本文介绍了一些阿里巴巴开

随机推荐

  • Ubuntu卡在登陆界面循环

    文章目录 一 现象二 原因三 解决措施 一 现象 先卡在这 xff1a a start job is running for hold until boot process finishes up 22s no limit 然后卡在这里 二
  • SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further

    报错 xff1a SLF4J Failed to load class org slf4j impl StaticLoggerBinder SLF4J Defaulting to no operation NOP logger implem
  • AWVS(Acunetix Web Vulnerability Scanner) Ubuntu下安装依赖缺失问题及解决

    最近在安装使用AWVS时 xff0c 安装出现了如下问题 xff0c 报错 Checking os Checking for dependencies dependency libgtk 3 so 0 not found on the sy
  • busybox login: root Login incorrect

    answer The file etc securetty comes with self explained header 34 etc securetty List of terminals on which root is allow
  • 在Macbook Pro上安装支持GPU的TensorFlow

    上一篇博文 在Macbook Pro上为TensorFlow设置GPU 中 xff0c 我们已经为Macbook上的NVIDIA显卡安装了各种驱动 xff0c 保证各种深度学习框架能够使用GPU进行计算 这儿就总结一下在后续安装Tensor
  • EXCEL 2016常用知识--Excel基础操作

    从数据填充开始讲起 xff0c 介绍Excel内置各种功能 xff0c 如筛选 查询 粘贴 单元格类型等 excel 窗口组成介绍 xff1a 1 快速访问工具栏 xff1a 添加你常用的命令 xff0c 方便我们快速操作和访问 xff1b
  • vue安装scss时报The “path“ argument must be of type string. Received undefined

    在安装vue安装scss时报The path argument must be of type string Received undefined 解决方式 xff1a 这个错误是sass loader 版本造成的 xff0c 此时的版本是
  • 利用python语言制作简单的音乐播放器

    from tkinter import from tkinter import filedialog from pygame locals import import time import pygame import sys pygame
  • 支撑程序员的三种精神

    我注意到有三种精神指引着软件开发人员的灵魂 伟大的艺术家精神 xff0c 可信赖的员工精神和自私的实用主义精神 伟大的艺术家精神 如果你听到一种声音说 你不能这样画 xff0c 然后 xff0c 你继续这样画 xff0c 这种反对的声音就会
  • 小白都懂的Python爬虫之网易云音乐下载

    微信又改版了 xff0c 为了方便第一时间看到我们的推送 xff0c 请按照下列操作 xff0c 设置 置顶 xff1a 点击上方蓝色字体 程序员之家 点击右上角 点击 设为星标 可以啦 xff0c 让我们继续相互陪伴 源 网络 目标 偶然
  • VBoxManage命令用法详解

    增加一个新的扩展包 VBoxManage extpack install lt vbox extpack gt 卸载指定扩展包 VBoxManage extpack uninstall lt name gt 显示已安装的扩展包 VBoxMa
  • Ubuntu2204之最小化安装操作系统

    目录 安装操作系统 xff08 跳过创建虚拟机 xff09 验证磁盘分区 配置静态IP 开启root登录 配置yum源 安装操作系统 xff08 跳过创建虚拟机 xff09 选择语言 xff1a 英语 下一步 默认安装ubuntu serv
  • 大数据领域三个大的技术方向资料

    大数据领域三个大的技术方向 xff1a 1 Hadoop大数据开发方向 2 数据挖掘 数据分析 amp 机器学习方向 3 大数据运维 amp 云计算方向 大数据学习什么 Python xff1a Python 的排名从去年开始就借助人工智能
  • 【技术栈】Spring环境配置

    1 创建maven环境 2 导入包 lt https mvnrepository com artifact org springframework spring webmvc gt lt dependency gt lt groupId g
  • mysql授权语句说明grant all privileges、创建用户、删除用户

    mysql的赋权语句 xff1a grant all privileges on to 39 root 39 64 39 39 identified by 39 123456 39 with grant option all privile
  • 视频下载网址

    视频下载网址 小视频下载 http www downfi com video V视频助手 xff1a http v ranks xin Video Grabber https www videograbber net zh Eagleget
  • EXCEL 2016常用知识--Excel函数

    必备常用函数教学 xff0c 包括逻辑函数 查找函数 文本函数 数学函数等 1 Excel计算的两种方式 Excel计算的两种方式 xff1a 公式 xff1a 一些运算符和数值组成的数学表达式 函数 xff1a 是Excel内部设置好的运
  • 【VIM】VIM

    vim version 查看vim版本 输入vim进入 xff0c 默认状态下是normal 模式 xff0c 输入的是命令而不是文本 q 退出 q 强制退出 i 进入编辑状态 xff0c 光标前插入 a 进入编辑状态 xff0c 光标前插
  • Windows上获取cpu info, cpuid, cpu id 方法整理

    1 使用cmd获取cpu id 在 CMD中输入如下命令 xff1a wmic cpu get processorid 2 使用源代码编译获取 cpu id xff1a 借码 三个源代码文件 调试通过 原文链接1 原文链接2 get cpu
  • 八大排序算法、稳定性及时间复杂度

    什么是稳定性 xff1f 假定在待排序的记录序列中 xff0c 存在多个具有相同的关键字的记录 xff0c 若经过排序 xff0c 这些记录的相对次序保持不变 xff0c 即在原序列中 xff0c r i 61 r j xff0c 且r i