排序1---几种排序以及其时间复杂度

使用Java实现排序算法:从基本排序到高级排序及其时间复杂度分析! 🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 阅读详情

略有修改。原帖地址:http://blog.sina.com.cn/s/blog_771849d301010ta0.html

快排,堆排序,归并排序比较重要。

 


 

1.选择排序:不稳定,时间复杂度 O(n^2)

    选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。 

2.插入排序:稳定,时间复杂度 O(n^2)

    插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i] 又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]和L[i-1],如果L[i-1]≤ L[i],则L[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止。图1演示了对4个元素进行插入排序的过程,共需要(a),(b),(c)三次插入。

3.冒泡排序:稳定,时间复杂度 O(n^2)

   冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。 

4.堆排序:不稳定,时间复杂度 O(nlog n)

    堆排序是一种树形选择排序,在排序过程中,将A[n]看成是完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。 

      建堆:无序的二叉树,然后从第n/2个元素向前调整(n/2-1,...,1)(调整依据是跟孩子节点相比)

 输出堆元素:把最后一个放在堆顶,然后从上往下调节。

5.归并排序:稳定,时间复杂度 O(nlog n)

    设有两个有序(升序)序列存储在同一数组中相邻的位置上,不妨设为A[l..m],A[m+1..h],将它们归并为一个有序数列,并存储在A[l..h]。 

 

6.快速排序:不稳定,时间复杂度最理想 O(nlogn) 最差时间O(n^2)

    快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。

7.希尔排序:不稳定,时间复杂度平均时间 O(nlogn) 最差时间O(n^s) 1<s<2

    在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为 增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。

   

 

排序类别

时间复杂度

空间复杂度

稳定

1

插入排序

O(n2)

1

√

 

2

希尔排序

O(n2)

1

× 不稳定

 

3

冒泡排序

O(n2)

1

√

 

4

选择排序

O(n2)

1

×不稳定

 

5

快速排序

O(Nlogn)

O(logn)

×

 

6

堆排序

O(Nlogn)

1

×

 

7

归并排序

O(Nlogn)

O(n)

√稳定

 

 


 

所以O(NLOGN)算法中稳定的只有归并排序。O(n^2)算法中不稳定是选择排序和希尔排序

ST MotorControl Workbench 6.2.1 自定义硬件配置避坑指南 本文详细介绍了ST MotorControl Workbench 6.2.1在自定义硬件配置中的常见问题与解决方案,涵盖功率板配置、采样电路校准、电机参数设置及代码生成避坑指南,帮助开发者高效完成电机控制项目开发。 阅读详情

相关推荐

神经网络:初学者指南(专业版)

神经网络是一种受生物大脑启发的计算模型,由多层互连的人工神经元组成。本文从生物神经元结构出发,介绍了感知器模型、激活函数、网络架构(输入/隐藏/输出层)等基础概念,并详细阐述了前向传播、反向传播、损失函数和优化器等核心训练机制。同时涵盖了CNN、RNN等常见架构,以及过拟合、梯度消失等关键挑战,最后概述了神经网络在计算机视觉、NLP等领域的广泛应用。全文系统性地梳理了神经网络的基础理论和实践要点,为初学者提供了清晰的学习路径。

weixin_42107409的博客 1782

几种排序以及其时间复杂度

1.选择排序:不稳定,时间复杂度 O(n^2) 选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。 这样,经过i遍处理之后,前i个记录的位置已经是正确的了。 2.插入排序:稳定,时间复杂度 O(n^2) 插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,

bladeandmaster88的博客 635

Synares病毒实战:如何从U盘感染中恢复你的Excel和EXE文件(附专杀工具推荐)

本文详细介绍了Synares感染型病毒的典型特征与传播机制,特别是其通过U盘感染Excel和EXE文件的行为。文章提供了一套从应急隔离、诊断到使用专杀工具进行深度清除与文件恢复的完整实战流程,并推荐了有效的安全软件和修复方法,旨在帮助用户最大程度救回重要数据并构建长效安全防护习惯。

weixin_29230649的博客 1810

数据结构-各种排序对比(时间复杂度,空间复杂度,稳定性等等)

查找与排序除了需要掌握代码外,还需要掌握各种性能对比,本文对常见的排序算法的性能进行对比。 如有错误,请读者指正。 排序算法性能比较 排序算法 时间复杂度 空间复 杂度 稳定性 适用性 一趟是否能 确定一个位置 比较次数是否 与初态无关 直接插入排序 最好:O(n) O...

关注网络安全、云原生安全 6870

人工智能在高中教育中的应用现状剖析与挑战应对

人工智能在高中教育中的应用现状剖析与挑战应对

燕鹏 1338

【HCIA学习记录】WLAN配置实验

HCIA-WLAN

寸先生的AI道路 3872

八大排序以及其时间复杂度

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 本文将依次介绍上述八大排序算法。 算法一:插入排序   插入排序示意图 插入排序是一种最简单直观的排序算法,它的工作原理是...

zhang_bing_b的博客 1万+

PCB线路板的制作工艺流程分享!2021-08-21

Pcb板制作工艺流程:开料-钻孔-沉铜-压膜-曝光-显影-电铜-电锡-退膜-蚀刻-退锡-光学检测-印阻焊油-阻焊曝光、显影-字符-表面处理-成型-电测-终检-抽测-包装。具体如下:1、开料(CUT) 将原始的覆铜板切割成可以用在生产线上制作的板子过程2、钻孔 使PCB板层间产生通孔,以达到连通层间的目的。 3、沉铜 经过钻孔后的线路板在沉铜缸内会发生氧化还原反应,形成铜层对孔进行孔金属化,使原来绝缘的基材表面沉积上铜,达到层间电性相通。 4、压膜 压膜后的PCB板上面压了一层蓝色的干膜, 干膜是一个载体

jdbpcb88的博客 3246

数据结构与算法-各种排序算法时间复杂度和空间复杂度表

JxufeCarol的博客 3583

【产品经理修炼之道】-如何搭建企业级账务系统?

笔者公司的业务模式具有一定的独特性,不同于我们常见的市面上供应链类公司的进销存模式。公司主要为各大银行和金融机构提供信贷领域的风控服务,客户主要通过请求公司的数据产品接口产生费用,可以简单地理解为请求一次接口收费0.5元,一个月若是有1w人请求同一个接口则公司需要收费5000元。

xiaoli8748的专栏 5404

模组 RG500Q入网问题分析

- [ ] 不同于公网,在5G专网环境中, 通常使用很多非标准的网络配置,如PLMN/APN等。因此,5G模组在专网环境下通常要做一些专门的配置才能正常入网,本文分析一例在专网环境, 5G终端无法入网问题的定位过程。 - [ ] 具体涉及到以下模组操作: 恢复出厂、SA only、锁BAND、配置MBN等

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 935

快速排序的时间复杂度和空间复杂度

快速排序算法在数组中选择一个称为主元(pivot)的元素,将数组分为两部分,使得 第一部分中的所有元素都小于或等于主元,而第二部分的所有元素都大于主元。对第一部分递归地应用快速排序算法,然后对第二部分递归地应用快速排序算法。 在最差情况下,划分由 n 个元素构成的数组需要进行 n 次比较和 n 次移动。因此划分所需时间为 O(n) 。最差情况下,每次主元会将数组划分为一个大的子数组和一个空数组。

shuxingcq的博客 1万+

linux安装配置Mysql详细步骤

下载Mysql rpm包 官网下载:https://dev.mysql.com/downloads/mysql/ 如果你到了这里,本地应该有了如下四个rpm包: mysql-community-client-5.7.26-1.el6.x86_64.rpm mysql-community-common-5.7.26-1.el6.x86_64.rpm mysql-community-libs-5...

🏆 前端领域优质创作者 7万+

排序

几种排序算法及其时间复杂度 排序算法 时间复杂度 是否基于比较 冒泡、插入、选择 O(n^2) 是 归并、快排 O(nlogn) 是 桶、计数、基数 O(n) 否 如何分析一个排序算法 排序算法的执行效率 最好、最坏、平均情况时间复杂度 分析排序算法时间复杂度的时候,不仅要给出最好、最坏、平均时间复杂度,并且要给出对应的要排序的原始数据。 时间复杂度的系数、常数、低阶...

凯凯王的技术生涯 396

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++(各种)排序

排序(sort),是C++中一种重要的算法,其中,最常用的就是这几种了

shit54188的博客 99

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

算法时间复杂度

O(1) 常数阶 < O(logn) 对数阶 < O(n) 线性阶 < O(nlogn) < O(n^2) 平方阶 < O(n^3) <{O(2^n) < O(n!) < O(n^n)} 排序算法 n^2 冒泡(稳定) nlog(n) 堆排序(不稳定),归并(稳定),快速(不稳定),希尔(不稳定) 字符串匹配 普通算法O...

weixin_30252155的博客 71

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

算法 - 时间复杂度

如果一个问题的规模是n,解这一问题的算法所需要的时间为T(n)。随着问题规模n的增加,T(n)也会随之增长。 T(n)称为这一算法的时间复杂性。 O(1) Temp=i;i=j;j=temp; 如果算法的执行时间不随着问题规模n的增加而增长,那么它的时间复杂度就是O(1)。 O(logN) 二分查找 O(NlogN) 快排 O(n^2)

Name_Larry 308

软考-算法(排序)

所有常数级的时间复杂度都用O(1)来表达 log2n这种时间复杂度出现在树中,比如一个3层的平衡度比较好的排序二叉树结点数为7,你查找某个数是否在这个树中,最多需要查找3次,大概就是log2n的时间复杂度. 二分查找的前提是序列是有序序列. 散列表 减少冲突的方法:可以把空间取的大一些,比如取余法中把余数设的大一些. 排序 稳定排序:值相等的两个或者多个元素,在排序后仍然保持之前的前后关系,这个就是稳定的. 比如图中的黑色的21在红色的21前面,排序后如果仍然还是这样...

Stephen___Qin的博客 397

几种常见排序算法时间复杂度

1、插入排序 插入排序时间复杂度: 最好: 所有元素已经排好序,只需遍历一遍,无需交换位置; 最坏: 所有元素逆序排列,遍历一次需要比较的元素个数每次+1,所以时间复杂度是O(n^2); 平均时间复杂度就是O(n^2)喽。 2、 ...

lzg_na的博客 5万+

几种常见的排序及其时间复杂度

1.插入排序 java版

u014080514的专栏 1216

几种常用的排序算法以及其时间复杂度

1.选择排序:不稳定,时间复杂度 O(n^2)     选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。  2.插入排序:稳定,时间复杂度 O(n^2)     插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L

杰克米可的博客 2729

常见的几种排序算法的时间复杂度

一. 排序算法的介绍 概述:排序也称排序算法,排序是将一组数据,依指定的顺序进行排列的过程。 排序的分类 (1) 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。 (2) 外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。 二. 时间复杂度的相关概念 度量一个程序(算法)执行时间的两种方法。 (1) 事后统计的方法 (2) 事前估算的方法 时间频度的介绍。 时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。

s19862388581的博客 8173

排序算法之 选择排序 及其时间复杂度和空间复杂度

其实选择排序是非常简单的,和冒泡排序有异曲同工之妙。就是把元素分成两部分,一部分是有序的,另外一部分是无序的;每次循环从无序的元素中选取一个元素放到有序的元素中,依次循环到最后把所有元素都放到了有序那一部分中(也就是无序部分,元素为零);

YuZhiHui_No1的专栏 2万+
上一篇: 数据库: 左连接/右连接/全连接(详细) --复习一下
下一篇: 查询IP地址
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值