分享好友 最新动态首页 最新动态分类 切换频道
七种排序算法
2024-12-26 11:04

  

七种排序算法

  排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次
序保持不变即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
内部排序:数据元素全部放在内存中的排序。
外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

插入排序分为两种,一种是简单插入,一种是直接插入。

1.1(简单插入)

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

依次类推直到全部有序为止。

 
       1.2(直接插入)
 

 

 直接插入总结

 1.时间复杂度为O(N^2)

时间复杂度我们就看一个算法的最坏情况。

最坏的情况下,从无序数组中拿一个值放到有序数组中遍历一遍前面已经排好的有序数组,从第二个值开始,第一次找1次,第三个值找两次,以此类推,也就是1+2+3+....n-1。用Sn=n(n+1)/2算出时间效率为O(N^2)。

2.空间复杂度总结

没有开辟新的空间,只是用到新的变量,所以为O(1)。

         我们会定义一个变量gap,gap是相邻为gap的元素进行交换,希尔排序分为两步(1)预排序(只要gap不为1就是预排序),预排序的意义:大的数更快跳到后面去,小的数更快跳到前面来,gap越大跳的越快,越不接近有序,gap越小跳的越慢,越接近有序当gap==1时候,直接就相当于直接插入排序。在gap的前几次排序后,当为gap==1时候,这时候数组相邻的数的大小基本就是相差为1左右(对于举例数组来说),就可以把数组分为有序。

和无序两块区域,然后以直接插入算法排序。 

下面是希尔排序的两种算法:   

 

    希尔排序总结

时间复杂度:我们按最差情况来分析,我们在分析时可知,当gap==n/3时候,若整个数组逆序,gap==n/3的数组,每组比较(1+2),也就是n/3*3;若gap==n/9的数组,全部逆序,每组比较36(1+2+3+4+....8),也就是n/9*36=4n次,但当gap==1的时候,无线接近n次。因此我们可以通过结论来画出一个关联图。

时间效率我查询资料为O(N^1.3)

空间复杂度:O(1),没有开别的空间。

3.选择排序

这是没有优化之前的代码 (按升序),选择排序代码就是把数组分为已排序和待排序的两部分,第一次是拿数组的第一个当已排序的数(其实并没有排)。之后每一次就是拿已排序的最后一个和待排序的其中一个最小值进行交换,如果没有就自己交换自己。

 

 简单选择总结

时间效率:O(N^2),每次查找交换就是遍历数组,N次查找就是N^2。

空间效率:O(1)

优化后版本

优化前我们 一次遍历我们只找一个值并把它按正确位置排好,优化后我们可以一次遍历同时找到最小值和最大值。

这里会有错误

当max和begin 重合时就发发生错误,begin先和min交换,然后才交换max和end,所以交换数字错误,因此写代码这里要加一层判断,当max==begin时候,把min的位置赋给max。

 
 4.堆排序

 堆排序我认为是排序算法中比较难理解的算法。因为要各种换来换去的,如果不熟悉很容易晕。

堆排序分为两步

1.建堆

         将一堆无序的数按建大根堆或者小根堆的规则建立起来。

          大根堆:根结点的元素是最大的,并且根的左右孩子的比它小,也可以叫父亲结点,以此类推,小根堆就是它的相反过程。

     如图所示就是一个大堆。

在完全二叉树,下面每一层结点个数都是上一层的两倍,最后一个下标减1除以二就是最后一个非叶子结点的下标。

这里面执行四次操作,需要四次循环,在下面的排序代码中进行循环。

 

2.排序

         排序就是每次将堆顶的元素和堆的最后一位进行交换,然后接着将剩余n-1个元素再次建堆,接着交换堆顶和第n-2个元素,后面重复此操作,直到全部有序。

 

堆排序总结

时间效率: O(N*logN) ,因为在 每次将堆顶元素交换后,需要重新建堆,需要遍历堆中剩余所有元素。

空间效率:O(1)

5.冒泡排序
 

 冒泡排序总结:

时间效率:排好一个数要遍历一遍数组,所以排好N个数要O(N^2)的时间效率。

空间效率:仅开了一个遍历tmp所有空间为O(1)。

6.快速排序

1.

 
 
 
 
 

 

 

2.快速排序的优化

        快速排序对于无序的序列来说,排的非常快O(N*logN),但对于有序序列或者接近有序序列来说,需要O(N^2),差距是非常明显的,因此我们需要在任何一次排序前对当前序列进行一次优化,叫三数取中。三数取中就是将序列第一个和最后一个数的下标除以2,得到一个中间下标,然后比较这三个下标对应的值,取中间大小的值把它与第一个交换,然后让它当keyi。这样的目的是让每次排序都可以更快速的让大值往后走,小值往前走。

无序序列

 

快速排序总结:

时间效率:O(N*logN)。

空间效率:O(1)。

7.归并排序
 

 

 归并排序总结:

时间效率(N*logN)。

空间效率O(1)。

如果觉得有帮助,麻烦一件三连。

最新文章
草根站长的源动力-国内站长网站缩影
随着互联网的发展,国内个人网站也迅速雨后春笋般迅速发展。犹如80年代的私营企业发展个人网站的故事也频繁登上各媒体的版面 非官方的统计:目前国内已经有草根站长300万个。已经开始盈利的个人网站 近5万个个人网站的总收入已经超过3亿 这
背包有个十字架的牌子 十大奢侈品包包排名及图标志
背包有个十字架的牌子,是一个备受关注的奢侈品包包品牌。随着时尚产业的发展和消费观念的改变,越来越多的消费者对于高品质、独特设计的包包有着强烈的需求。在这样的市场环境下,背包有个十字架的牌子以其独特的设计和卓越的品质迅速崛起
港股开盘:恒生指数开盘跌0.59%,恒生科指跌0.61%,美团跌近2%
金融界12月17日消息 港股恒生指数开盘跌0.59%,报19678.03点,恒生科技指数跌0.61%,报4387.62点,国企指数跌0.53%,报7095.14点,红筹指数跌0.1%,报3691.93点。大型科技股中,阿里巴巴-W跌0.53%,腾讯控股跌0.89%,京东集团-SW跌1.39%,
玩转serv00虚拟主机(一):零成本搭建wordpress个人博客&入门
不少童鞋在搭建博客、alist、图床等各类web服务的时候苦于云的成本望而却步,但其实搭建web服务也可以用虚拟主机,不少厂商都有免费的虚拟主机,但对于很多童鞋可能是第一次听说虚拟主机,这里就开一个新的系列,玩转serv00家的免费虚拟主
考研民商法学专业容易上岸的大学怎么选择
在准备考研的过程中,选择合适的学校是至关重要的一步。尤其是对于民商法学专业的考生来说,如何找到一所适合自己的学校更是需要认真考虑的事情。本文将为大家提供一份考研选择民商法学学校指南,帮助你在众多院校中做出明智的决定。首先,
老照片如何修复成高清?四个老照片修复教程全揭晓
让老照片焕发新生:给你分享老照片修复的精彩工具 提到老照片,很多人心中总是涌动着温暖的回忆。家人们,是否曾经翻阅过那些泛黄的照片,感受到那份岁月的沉淀?但时间的流逝总会导致照片的劣化,很多细节模糊甚至消失。那么,我们该如何
四川甜城旅游景点大全:热门景点排名及详细介绍
四川甜城即四川省内江市以其独有的地理位置和丰富的历史文化遗产而闻名遐迩。内江不仅是的“糖都”也是甜城文化的发源地。这里既有壮丽的自然景观又有深厚的历史文化底蕴是一个不可多得的旅游胜地。从古朴典雅的隆昌石牌坊到秀美宁静的甜城
打破传统边界:类似WU界SaaS模式的无边界链接能力?软件开发服务
打破传统边界:类似WU界SaaS模式的无边界链接能力?软件开发服务+系统搭建+电商模式,微三云麦超介绍前文介绍:莞云软件供应链云平台系统——为什么选择莞云 莞云,移动应用系统产业软件供应链平台! 东莞市商二信息科技有限公司旗下品牌有
腾讯地图开放平台申请
2024年01月14日吴经理100地图标注 , 地图定位 , 导航地图标记网络技术服务;信息技术咨询服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;日用百货销售;化妆品零售;互联网销售(除销售需要许可的商品);化妆品批发;服
《推广商业范例》PPT课件
《《推广商业范例》PPT课件》由会员分享,可在线阅读,更多相关《《推广商业范例》PPT课件(32页珍藏版)》请在装配图网上搜索。1、RSS 计划更新条码与标识 2 议程介绍缩小空间码(RSS) RSS与 EAN/UPC和EPC的比较 GS1的 RSS决策 GS1推广商
相关文章
推荐文章
发表评论
0评