商务服务
【排序详解】冒泡、选择、插入
2025-01-02 19:54

目录

一、冒泡排序

1、普通的冒泡

2、优化的冒泡

二、选择排序

1、普通的选择

2、优化的选择

三、插入排序

1、普通的插入

2、优化的插入


        此算法从小到大排序的基本原理是:每一趟排序讲待排续空间中每一个元素与后一个进行比较,若存在小于关系,则进行冒泡(交换,一趟排序下来以后,待排序空间中的最后一个元素最大。

        第 1趟排序时待排序下标空间为[0..N-1],从 a[o]到 a[N-1-1]依次与其后相邻元素比较,若大于,则交换。这样,第 1 趟排序之后,保证 [N-1]最小。

        第 k 趟排序时待排序下标空间为[0..N-k],从 a[o]到 [N-k-1]依次与其后相邻元素比较,若小于,则交换。这样,第 k 趟排序之后,保证 a[N-k]最小。采用此算法重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误,就把它们交换过来。
        借助从网上流传最广的图片理解。

最坏时间复杂度最优时间复杂度时间复杂度空间复杂度o(n^2)o(n^2)o(n^2)o(1)

1、普通的冒泡

 

2、优化的冒泡

 

        这个函数的区别在于上述函数添加了一个优化的标志位(flag)。这个标志位用于判断在一轮冒泡排序中是否发生了元素交换,即是否有逆序对存在。如果在某一轮排序中没有发生逆序对,说明数组已经是有序的,可以提前结束排序过程。

        这种优化可以有效减少排序的次数,当待排序的数组本身已经部分有序时,可以大幅度减少排序的时间复杂度。而第一个函数则是每一轮都需要进行完整的比较和交换操作,无论数组的有序程度如何。

        综上所述,第二个函数(添加了标志位的冒泡排序)相对于第一个函数(普通的冒泡排序)在某些情况下具有更好的性能和效率。

 

        这段代码实现的是一种改进的冒泡排序算法,其主要思想是同时从前往后和从后往前进行排序。这种改进的冒泡排序算法通过同时从两个方向进行排序,可以更快地将较大或较小的元素移动到正确的位置,从而提高排序效率。

        选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找最小(大)元素,将其放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。

1、普通的选择

 

2、优化的选择

 

        未优化的代码使用两层循环来实现选择排序。外层循环从索引0开始,依次遍历数组中的元素,内层循环从外层循环位置的下一个索引开始,找到未排序部分的最小元素,并将其索引赋值给变量min。然后,通过交换外层循环位置的元素和最小元素,将最小元素放置在已排序部分的末尾。这样,每一次外层循环结束时,已排序部分的长度会增加一个元素。

       优化的代码使用了双指针的方式来实现选择排序。它使用begin和end两个指针分别指向待排序部分的起始和结束位置。在每一轮迭代中,通过两个嵌套的循环分别找到未排序部分的最大元素和最小元素的索引,并将它们分别赋值给变量max和min。然后,通过交换起始位置的元素和最小元素,将最小元素放置在已排序部分的末尾;再次交换结束位置的元素和最大元素,将最大元素放置在已排序部分的开头。接着,更新begin和end指针,缩小待排序部分的范围。

这两段代码的核心思想相同,都是在每一轮迭代中选择未排序部分的最小(或最大)元素,并将其放置在已排序部分的末尾(或开头)。它们的时间复杂度都为O(n^2),其中n为数组的长度。不同之处在于具体实现方式和使用的变量名不同,但最终的排序结果是相同的。

        此算法从小到大排序的基本原理是:从第二个元素开始,将其视为已排序序列。将当前元素与已排序序列中的元素进行比较,找到合适的位置插入。插入操作涉及将较大元素向右移动,为新元素腾出空间,直到所有元素都被插入到正确的位置。

具体步骤如下

  1. 从第二个元素开始,将其保存在一个临时变量中。
  2. 向前遍历已排序序列,如果当前元素大于临时变量,将当前元素后移。
  3. 如果找到小于或等于临时变量的位置,将临时变量插入到该位置。
  4. 重复步骤 1 到 3,直到所有的元素都被插入到正确的位置。

   借助从网上流传最广的图片理解。

1、普通的插入

 

2、优化的插入

 

使用二分查找改进插入排序,使之最坏情况下时间复杂度为Θ(nlgn)。

此种方法实现了使用二分查找来确定插入元素的位置,从而优化插入排序的过程。具体分析如下

1.函数binarySearch():该函数用于确定元素key在已排序数组arr中应该插入的位置。它通过不断将待查找区间缩小为原来的一半来进行查找,直到最后low>high时停止,此时low即为要插入的位置。在每一次比较时,通过与中间元素比较来确定key所属的子区间。

2.函数binInsertSort():该函数实现了插入排序过程,对数组arr进行排序。在每一次迭代中,首先将待插入的元素key查找其应当插入的位置,然后再移动其他元素,将key插入到正确的位置上。

    以上就是本篇文章【【排序详解】冒泡、选择、插入】的全部内容了,欢迎阅览 ! 文章地址:http://keair.bhha.com.cn/news/5063.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 康宝晨移动站 http://keair.bhha.com.cn/mobile/ , 查看更多   
最新文章
入境游订单同比增长123%!福州旅游市场迎“五一”预订高峰
“五一”假期临近,福州旅游市场迎来预订高峰。据携程数据显示,截至4月16日,“五一”假期福州酒店订单量同比去年增长12%,机
给近三年最好的10部刑侦剧排个名:《乌云之上》第8,《狂飙》第3
今年开年以来,国产剧算是和刑侦类型“杠”上了。刑侦剧一部接一部,几乎没有空窗期。要么是还原了曾经的真实悬案,要么是剧情高
北京11个上市基础设施公募REITs项目募集235亿元
  中新网北京4月1日电 (记者 吕少威)记者今天从北京市发改委获悉,北京市积极推进基础设施公募REITs工作,目前累计共有11个基
ipad怎么看运行内存苹果手机怎么看内存「ipad怎么看运行内存」
iPad查看运行内存教程在iPad上查看运行内存可以帮助你了解当前设备的使用情况,以及是否需要关闭一些应用程序以释放内存。以下是
兰州华为荣耀手机维修_华为手机维修西站店手机维修店「兰州华为荣耀手机维修_华为手机维修西站店」
搭载天玑1000+旗舰芯片,采用10亿色视网膜级超感屏,配备旗舰级5000万高清主摄等,诚意满满。今天我们小九主要来跟大家说说荣耀V40
十堰空调维修|十堰空调加氟|十堰空调维修电话0719-7017199
十堰空调维修中心【电话0719-7017199】主营:十堰空调维修,十堰空调加氟,服务好价格低,各区均有分点,专业十堰空调维修加氟人员随叫随到,欢迎咨询报修。
这群青年真提气!专注自己的事 就能干成事
  这群青年真提气!  4月15日,全球首个地月空间大尺度三星星座建成的消息公布。让人心头一热的,不只是117万公里星间链路打
斗破苍穹中丹塔未来三巨头会是谁?曹颖有望占据一席,宋清可捡漏
在斗破苍穹中,与魂殿齐名的丹塔,在斗气大陆上拥有非常高的地位,被所有炼药师视为圣地,有着无与伦比的号召力。丹塔外部的三位
手机的RAM和ROM分别指什么手机rom「手机的RAM和ROM分别指什么」
关于眼光和格局的诗句有:1、莫愁前路无知己,天下谁人不识君——唐代高适《别董大二首·其一》译文:不要担心前路茫茫没有知己
太阳能电磁阀嗡嗡响,太阳能上水时电磁阀一声巨响冒烟是怎么回事手机一直震动不停怎么回事「太阳能电磁阀嗡嗡响,太阳能上水时电磁阀一声巨响冒烟是怎么回事」
冒烟就很有可能是哪部分的短路烧坏了。可能是绝缘线也有可能是电磁阀的漆包线你说呢...为什么不要呢,太阳能真是太方便了。找到
相关文章