分享好友 最新动态首页 最新动态分类 切换频道
Java->排序
2024-12-25 19:03

目录

一、排序

1.概念

2.常见的排序算法

二、常见排序算法的实现 

1.插入排序

1.1直接插入排序

1.2希尔排序(缩小增量法)

1.3直接插入排序和希尔排序的耗时比较 

2.选择排序

2.1直接选择排序

2.2堆排序

2.3直接选择排序与堆排序的耗时比较

3.交换排序

3.1冒泡排序

3.2快速排序

1. Hoare版

2. 挖坑法

3. 前后指针

3.2.1快速排序的优化

1.三数取中法选key

2. 递归到小的子区间时,可以考虑使用插入排序

3.2.2非递归的快速排序

4.归并排序

1.归并排序 

2.非递归的归并排序 

3.海量数据的排序问题

5.排序算法复杂度及稳定性分析

​编辑

三、其他非基于比较排序

1.计数排序

2.基数排序

3.桶排序

4.比较

5.排序

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

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

 内部排序:数据元素全部放在内存中的排序

外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求在内外存之间移动数据的排序

把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列

1.1直接插入排序

 

直接插入排序的特性总结
1. 元素集合越接近有序,直接插入排序算法的时间效率越高
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1),它是一种稳定的排序算法
4. 稳定性:稳定

如果一个排序     本身就是稳定的排序        那么它就可以被实现为不稳定的排序

但是一个排序     本身就是不稳定的排序    那么它不可能被实现为稳定的排序

1.2希尔排序(缩小增量法)

先选定一个整数,把待排序文件分为整数个组,再进行每个组内的排序

跳跃式分组: 

 

 希尔排序的特性总结
1. 希尔排序是对直接插入排序的优化。
2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。
3. 希尔排序的时间复杂度不固定:O(N^1.3)....O(N^1.5)
4. 空间复杂度:O(1)  ,不稳定

1.3直接插入排序和希尔排序的耗时比较 

 
 

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完

2.1直接选择排序

 

直接选择排序的特性总结:
1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1)
4. 稳定性:不稳定

 

2.2堆排序

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆

 

堆排序的特性总结
1. 堆排序使用堆来选数,效率就高了很多。
2. 时间复杂度:O(N*logN)
3. 空间复杂度:O(1)
4. 稳定性:不稳定

2.3直接选择排序与堆排序的耗时比较

 
 

所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

3.1冒泡排序

 

冒泡排序的特性总结
1. 冒泡排序是一种非常容易理解的排序
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1)
4. 稳定性:稳定

优化

 

3.2快速排序

任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止

1. Hoare版
 

快速排序的特性总结
1. 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序
2. 时间复杂度:O(N*logN)     如果的是1 2 3 4 5 或 5 4 3 2 1…… 单分支的树时间复杂度为O(N^2),但一般不说快排时间复杂度为O(N^2)
3. 空间复杂度:O(logN)   单分支的树空间复杂度为O(N)
4. 稳定性:不稳定

 
 
2. 挖坑法
 
3. 前后指针
 
3.2.1快速排序的优化
1.三数取中法选key
 
2. 递归到小的子区间时,可以考虑使用插入排序
 
3.2.2非递归的快速排序
 
 

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

1.归并排序 

 

归并排序的特性总结
1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
2. 时间复杂度:O(N*logN)
3. 空间复杂度:O(N)
4. 稳定性:稳定

 

2.非递归的归并排序 

 

3.海量数据的排序问题

外部排序:排序过程需要在磁盘等外部存储进行的排序
前提:内存只有 1G,需要排序的数据有 100G
因为内存中因为无法把所有数据全部放下,所以需要外部排序,而归并排序是最常用的外部排序
1. 先把文件切分成 200 份,每个 512 M
2. 分别对 512 M 排序,因为内存已经可以放的下,所以任意排序方式都可以
3. 进行 2路归并,同时对 200 份有序文件做归并过程,最终结果就有序了

排序方法最好平均最坏空间复杂度稳定性冒泡排序O(n)O(n^2)O(n^2)O(1)稳定插入排序O(n)O(n^2)O(n^2)O(1)稳定选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定希尔排序O(n)O(n^1.3)O(n^2)O(1)不稳定堆排序O(n * log(n))O(n * log(n))O(n * log(n))O(1)不稳定快速排序O(n * log(n))O(n * log(n))O(n^2)O(log(n)) ~ O(n)不稳定归并排序O(n * log(n))O(n * log(n))O(n * log(n))O(n)稳定

计数排序的场景一定是数据集中在某各范围中

步骤

1. 统计相同元素出现次数
2. 根据统计的结果将序列回收到原来的序列中

 

时间复杂度:O(范围 + N )

空间复杂度:O(范围)

稳定性:稳定

队列,桶

划分多个范围相同的区间,每个子区间自排序,最后合并

最新文章
马鞍山市花山区委宣传部2024年《魅力花山》专栏服务采购单一来源采购公告
项目概况马鞍山市花山区委宣传部2024年《魅力花山》专栏服务采购的供应商马鞍山日报社应在马鞍山市公共资源交易系统获取采购文件,并于2024年12月18日09点00分前提交响应文件。一、项目基本情况项目编号:MASCG-0-F-F-2024-1210项目名称:
骁龙865 Plus首秀!联想拯救者电竞手机Pro评测:直逼游戏机的堆料异形
一、后发先至:史上预热最久的手机 首发骁龙865 Plus联想拯救者电竞手机可以说是史上预热最久的手机,早在2019年12月份官方微博开通之时,联想就预告拯救者电竞手机即将登场,现在终于正式发布,已经过了7个多月的时间。为什么产品从预热到
用AI生成美女写真,体验最新的AI画图神器!
在这个数字化迅猛发展的时代,很多人都幻想过用AI技术来生成心目中的完美形象。想象一下,出门前只需轻松几步,就可以得到一张超逼真的美女写真,立刻让你在线上社交平台脱颖而出。这种想法曾经只存在于科幻电影中,但如今通过AI工具的不断
淘宝店铺转让流程及标准是多少
淘宝店铺转让流程及费用标准是多少一、淘宝店铺转让流程一、打开淘宝站点,进入首页,找到“登陆”按钮,;输入用户名与密码,进行登陆操作。登陆成功后,点击浏览器顶部的“卖家中心”,进入相应的页面,进行操作。二、在卖家中心,左侧找
四肖三肖必开期期准精准,准确资料解释落实_娱乐版305.210
文章讨论了“四肖三肖”彩票玩法及其技巧。这种玩法包括四个固定号码(四肖)至少出现一次和三个固定号码(三肖)至少出现两次。作者建议通过分析历史数据来提高投注准确率同时强调彩票是一种娱乐方式不应过分依赖。文章还提到双色球、大乐
用AI自动生成超逼真美女写真,轻松打造你的个性化形象!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在现代数字化时代,科技的迅速发展让我们能够创造出许多不可思议的事情。其中,AI绘画工具的
道指连跌七日,博通涨逾24%市值首破万亿美元; OpenAI:马斯克2017年就想要我们转为营利性组织
摘要:美股收盘 | 道指连跌七日,博通涨逾 24% 加入 " 万亿美元俱乐部 "!迈威尔科技收涨近 11%,SoundHound 暴涨 23%特斯拉涨超 4% 创新高,报道称特朗普团队寻求废除自动驾驶车辆事故报告要求最新研究证实:诺和诺德Ozempic 与罕见视力丧
词令怎样把链接生成关键词打开?
词令是一款关键词口令直达工具。打开词令,输入口令,直达该口令关联的目标。网址转成口令后,就可以通过词令,输入口令,打开口令关联的目标网址。口令打开网址体验口令是:vip88,请打开词令App或词令官网,输入口令【 vip88 】,搜索直
百度蜘蛛池出租:加入蜘蛛池收录反而下降,揭秘SEO优化中的误区与对策
本文目录导读:蜘蛛池的原理及作用加入蜘蛛池后收录下降的原因如何应对加入蜘蛛池后收录下降的问题随着互联网的快速发展,SEO优化已经成为网站运营中不可或缺的一环,在SEO优化的过程中,很多站长都陷入了一些误区,其中最常见的一个误区就
网站的推广方式有哪些
网站的推广方式包括多种策略,如搜索引擎优化(SEO)提升网站在搜索结果中的排名,搜索引擎营销(SEM)通过付费广告增加曝光度,社交媒体营销利用社交平台进行内容推广和互动,内容营销通过优质内容吸引目标用户,邮件营销定向发送推广信息
相关文章
推荐文章
发表评论
0评