首页 > 其他分享 >【数据结构】排序2 交换排序

【数据结构】排序2 交换排序

时间:2023-08-15 17:24:39浏览次数:33  
标签:数据结构 元素 交换 每趟 算法 排序 比较

交换排序就是基于比较交换的排序。
主要讲两种交换排序算法:冒泡排序和快速排序
冒泡排序比较简单一般不会单独考察,重点考察的是快速排序的内容。

1.冒泡排序

基本算法思想:
对于每趟排序,从后往前两两比较,如果为逆序则进行交换,这样很显然不能一趟就得到正确的序列,但是每次都会把最小的元素移到序列的第一个位置,也就是每趟使一个元素移动到合适的位置上
当进行下一趟排序时,前面那些已经就位的元素就不必参与。
经过这些过程,最多做n-1趟冒泡就能完成排序过程。

这里有一个问题,在比较好的情况中,可能发生的情况是经过少于n-1的比较就已经完成排序。(比如如果只有一个需要交换的位置,比如 2 1 3 4 5 6,则只需要进行一趟交换就完成了排序。)
关于这个问题只需要检测一趟比较中是否有交换进行,如果本趟比较没有进行交换,则代表序列已经是有序的,直接结束算法即可。


代码实现:
image

每趟中如何进行比较?
取决于每趟排序的处理方式不同,算法的实现方式也不一样。
但是只要记住:如果需要从小到大排序的话,就在出现A[i-1]>A[i]时交换;如果需要从大到小,则在A[i-1]<A[i]时交换。
以从小到大排序为例:如果每趟从前到后进行,则排好序的序列会从后向前,也就是每次使一个最大的元素堆积在尾部。如果每趟从后往前进行,则每次使一个最小的元素堆积在头部。

示例:
image

性能分析:
image

2.快速排序

快速排序是一种通过比较来进行的分治算法,并且可以用递归来实现它。

算法基本思想:
image

每次使一个元素位于正确位置上。最坏情况下经过n趟即可完成排序。

实现过程:
image

标签:数据结构,元素,交换,每趟,算法,排序,比较
From: https://www.cnblogs.com/satsuki26681534/p/17631875.html

相关文章

  • SPOE交换机如何级联,SPOE接口和SPOE接口能直连吗?
    SPOE交换机在数字楼宇对讲中都需要使用到,最近有朋友问SPOE机交换机怎么级联?SPOE端口可以和SPOE端口连接吗?今天小柏就和大家讲解一下上次两个问题吧!SPOE交换机如何级联?SPOE交换就是强制性供电的,所以SPOE接口和SPOE接口不能直连,直连两个口都带电,会烧毁接口或交换机,SPOE的端口可以接不......
  • [MAUI]在.NET MAUI中实现可拖拽排序列表
    .NETMAUI中提供了拖放(drag-drop)手势识别器,允许用户通过拖动手势来移动控件。在这篇文章中,我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中,列表中显示不同大小的磁贴(Tile)并且可以拖拽排序。使用.NETMAU实现跨平台支持,本项目可运行于Android、iOS平台。创......
  • 希尔排序
    博客地址:https://www.cnblogs.com/zylyehuo/#_*_coding:utf-8_*_importrandomdefinsert_sort_gap(li,gap):foriinrange(gap,len(li)):#i表示摸到的牌的下标tmp=li[i]j=i-gap#j指的是手里的牌的下标whilej>=0and......
  • 数据交换平台运行说明
    运行说明安装包在文件夹中下载Nacos你可以从文件夹中(nacos-server-2.1.1.zip)自取,也可以github上下载,下载地址:https://github.com/alibaba/nacos/releases下载2.1.1版本,因为本项目使用的是Nacos2.1.1,如果版本号对应不上,后面项目启动会出错。准备nacos使用的数据库mysql安......
  • 数据结构4
    算法:数据结构中的算法,指的是数据结构所具备的功能解决特定问题的方法。学习的前辈们的一些优秀的经验总结算法的五大特征:(1)有穷性。一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。(2)确定性。对千每种情况下所应执行的操作,在算法中都有确切的规定,不会......
  • 快速排序
    参考:快速排序算法C++实现(超详细解析!!!!)_c++快速排序_sunny-ll的博客-CSDN博客开发者1024-知乎(zhihu.com)......
  • 拓扑排序 学习笔记
    模板题分析题目求一个图的拓扑序。需要用到拓扑排序。拓扑排序将一张图中的顶点以线性方式进行排序,使得对于任何的顶点\(u\)到\(v\)的有向边\((u,v)\),都可以有\(u\)在\(v\)的前面。并且拓扑排序只能在有向无环图(DAG)中完成。做法:每次找到入度为\(0\)的顶点,将这......
  • 线性表【数据结构学习-青岛大学王卓老师】
    https://www.bilibili.com/video/BV1qz4y1p767/线性表线性表的初始化(顺序表)StatusInitList(SqList&L){L.elem=(ElemType*)malloc(sizeof(ElemType)*MAXSIZE);if(!L.elem)exit(OVERFLOW);L.length=0;returnOK;}线性表的销毁voi......
  • table排序
    <el-tablev-loading="fourthloading":data="tableData4"style="width:100%"height="390"  @sort-change="sortChange"ref="fourthtable">//@sort-change  <el-table-columnprop="ti......
  • redis数据结构字典
    redis数据结构字典数据结构Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。哈希表typedefstructdictht{//哈希表数组dictEntry**table;//哈希表大小unsignedlongsize;//哈希表大小掩码,用于......