排序总结

熵桥流沙
• 阅读 883

排序总结

插入排序

直接插入排序折半排序希尔排序
过程遍历将元素插入前面的有序队列之中在直接插入的基础上改进:通过折半查找找出要插入的位置通过设定步长对步长内的数组进行排序,多次反复使得数组基本有序,之后使用直接插入排序
空间复杂度O(1)O(1)O(1)
比较一个元素时间复杂度最好(基本有序):O(1)
最坏(顺序相反):O(n)
平均:O(nlog2n)
总体时间复杂度O(n^2)O(n^2)最好:O(n^(1/3))
最坏:O(n^2)
稳定性稳定稳定不稳定
适用性顺序存储和链式存储顺序存储和链式存储仅顺序存储
特点基本有序时效率最高,最后一趟开始之前所有元素可能都不在最终位置上 组内排序使用直接插入排序

交换排序

冒泡排序快速排序
过程每次找出一个最值放到队头或者队尾不断地将待排序表进行划分,左边都比中间小,右边都比中间大直到待排序表基本有序为止
空间复杂度O(1)最好情况:O(log2n)
最坏情况:O(n)
平均:O(log2n)
比较次数n(n-1)/2
时间复杂度O(n^2)O(n^2)
稳定性稳定不稳定
特点元素相同时不会进行交换保证了稳定性是所有内部排序算法中平均效率最高的算法

选择排序

简单选择排序堆排序
过程遍历待排序表将最小(大)的放到前面,反复该过程先建立堆(大顶堆或小顶堆),输出堆顶数据后将堆底的数据放到堆顶然后向下调整。对堆进行排序则是从堆的最后一个元素开始进行排序,向上调整之后向下调整。
空间复杂度O(1)O(1)
比较次数n(n-1)/2实际情况实际分析
时间复杂度O(n^2)O(nlog2n)(插入元素与删除元素的时间复杂度都是)
稳定性不稳定稳定
特点 调整时间与树高有关,树越高调整时间越长,堆可以视为一颗完全二叉树,采用顺序存储的方式且对于大顶堆的次大值一定能在根的下一层,取出堆顶元素之后用堆最后一个元素替换堆顶元素后向下调整,若只是对堆进行排序则应该从最后一个元素开始进行排序。
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
thymeleaf在工作中遇到的问题及解决办法(四)
1、关于字符串拼接的问题       字符串拼接可以使用如下方式。<ahref""th:text"第${StartNo}页''共${countPage}页"       还有一种更优雅的方式,使用“||”减少了字符串的拼接,代码如下。<ahref""th:
Wesley13 Wesley13
3年前
java RSA算法的性能记录
环境JavaHotSpot(TM)64BitServerVM1.7.0\_05x86\_64加密<table<tr<td内容长度</td<tdkeySize</td<td耗时(微秒)</td</tr<tr<td32</td<td512</td<td87</td</tr<tr<td
红烧土豆泥 红烧土豆泥
4年前
Java的数值数据类型以及命名规范
一、Java中的数值数据类型<table<tbody<tr<tdwidth"75"valign"top"style"wordbreak:breakall;"<spanstyle"backgroundcolor:rgb(255,254,213);"类型名<br</span</td<tdwidth"299
Stella981 Stella981
3年前
Jira 使用手册
<tablestyle"width:100%;margin:200px0300px0;"<tr<thDate</th<thRevisionversion</th<thDescription</th<thauthor</th</tr<tr<td20180614</td<tdV1.0.0</td
Stella981 Stella981
3年前
Spring Security Oauth2.0 实现短信验证码登录
springsecurityoauth2登录过程详解​!oauth2登录过程详解.png(https://ask.qcloudimg.com/draft/1219867/th3wmc3zzu.png)​定义手机号登录令牌/
Wesley13 Wesley13
3年前
2020软件工程作业03
<styletable{width:100%;/\表格宽度\/margin:auto;/\外边距\/emptycells:show;/\单元格无内容依旧绘制边框\/fontsize:18px;}table,th,td{border:2pxsolidpink;}li{fontsize:1
Wesley13 Wesley13
3年前
Java 日期与时间
Java的日期Java没有内置的日期类,但可以导入java.time包,这个包中包含了许多类,可用于处理日期和时间。例如:<table<tbody<tr<thstyle"width:25%"Java类</th<thstyle"width:75%"描述</th</tr<tr<td<code
Easter79 Easter79
3年前
Thrift
安装thriftmacbrewinstallthrift安装完成检查thriftversion新建maven项目pom.xml<dependencies<dependency<groupIdorg.apache.th
Wesley13 Wesley13
3年前
C# 线程基础
1 线程是进程中的一个执行流 2线程是一个可以单独操作的活动3线程创建和常用方法 a 创建    Thread thnewThread(Method); b常见方法 th.start()//启动线程 th.Abort()//终止线程 Thread.Sleep(n)//休眠线程(停止n毫秒后继续执
Stella981 Stella981
3年前
99th Packers and Movers Services
99th.co.inistheleadingsearchdirectoryforIndia.Hereonecanfindtheverifiedcompaniesinanyindustryliketransport,logistics,packers&moversservice,BusinessService
吴押狱 吴押狱
1年前
测试用
Inrecentyears,theOscarshavebeenwidelycriticized.Frombeingtoopoliticallycorrecttolackinginnovation,andwithplummetingviewership,th