数据结构-顺序表的插入排序

        顺序表的排序可以看作数组排序的拓展。基本逻辑和数组排序的逻辑大同小异。

        由于顺序表中可以存放不同种的数据类型,进而和结构体排序又有相似之处。其中要注意的是(->)和(.)的区别。

        -> 符号是针对指针进行的操作,而 . 则是针对结构体的数据进行操作。

顺序表的初始化

const int M = 505;typedef struct{int key;            //关键元素int others;         //其他元素
}info;typedef struct{info r[M+1];        int length();       //表长
}SeqList,*PSeqList;

 直接插入排序

        分析:

        直接插入排序是最简单的排序。本质是将顺序表中的数据依次插入新的序列并使之有序的过程。

         在这个过程中,数字88的和88的相对位置没有发生改变,所以这个排序是稳定的。

void Insert_Sort(PSeqList PL)
{int p;for(int i = 2;i <= PL->length;i++){p = PL->r[i];            //标记int j = i-1;while(PL->r[0].key < PL->r[j].key;{PL->r[j+1] = PL->r[j];j--;}PL->r[j+1] = p;         //插入}
}

        复杂度:

        空间复杂度

        在空间上只使用了一个变量 p 进行转存操作。所以空间复杂度是O(1)

        时间复杂度

        最好的情况是所有的数据已经有序,每次操作只需要把顺序表中的数据依次放入新序列即可。总的比较次数为n-1次,总的移动次数为2(n-1)次。因此时间复杂度是O(n)

        最坏的情况是所有的数据逆序排列,每次操作都需要把这次操作的数据与新序列中每一个数据进行比较。第i趟的比较次数为i+1,移动次数为i+2

        总的比较次数\sum_{i = 2}^{n}i\approx \frac{n^{2}}{2},总的移动次数\sum_{i = 2}^{n}(i+2)\approx \frac{n^{2}}{2}。因此时间复杂度是O(n^{2})

        一般情况下当处理第i个元素s_{i}时,有i个可能的插入位置。假设每个位置的可能性相同。均为1/i,比较次数为j,则平均的比较次数为\sum_{j=1}^{i}\frac{1}{i}\times j=\frac{i+1}{2}。而直接插入排序的总比较次数为\sum_{n}^{i=2}(\frac{i+1}{2})=\frac{n-1}{2}+\frac{(n-1)\times (n+2)}{2}\approx \frac{n^{2}}{4}。一般情况下平均比较次数和平均移动次数为同一数量级,所以直接插入排序的时间复杂度为O(n^{2})

二分插入排序

        分析:

        使用二分查找的思路和插入排序相结合,可以大幅度减少时间复杂度,并且是稳定的排序。

        二分查找:

        设顺序表中的结点按关键字递增,首先将待查值k和表中间位置上的结点关键字mid进行比较。若二者相等,则查找成功。否则,如果k<mid,则在表的前半部分继续利用二分查找,反之,则在表的后半部分二分查找,如此进行下去直至查找结束。

        二分查找的时间复杂度为O(\log_{2} n)

        二分插入排序代码:

void BinInsert_Sort(PSeqList PL)
{int l,h,mid;int p;for(int i = 2;i <= PL->length;i++){p = PL->r[i];                    //标记l = 1;                           //设置区间h = i-1;while(l <= h)                    //循环查找{mid = (l+h) >> 1;if(PL->r[0].key >= PL->r[mid].key)l = mid+1;               //查找右半部分else    h = mid - 1;         //查找左半部分}for(int j = i-1;j >= h+1;j--)    //顺序表插入操作PL->r[j+1] = PL->r[j];        PL->r[h+1] = p;                  //插入}
}

        复杂度:

        空间复杂度

        与直接插入排序相同为O(1)

        时间复杂度

        与直接插入排序相比,二分插入排序的比较次数与待排序的初始状态无关,只与记录的个数有关。

        插入第i个记录时,比较次数最多为\left \lfloor log_{2}i \right \rfloor +1=\left \lceil log_{2}i \right \rceil。所以n个记录排序的总比较次数为\sum_{i=1}^{n}\left \lceil log_{2}i \right \rceil \approx n \times log_{2}n

        n较大时,显然时间复杂度比直接插入排序的最大比较次数小得多,而大于直接插入排序的最小比较数。移动次数和直接插入排序相同。所以时间复杂度为O(n^{2})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/365222.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现了Map接口的HashMap

HashMap 底层主要由以下几个部分组成&#xff1a; 数组 (Node<K,V>[] table): 这是一个数组&#xff0c;存储的是链表的头节点。默认大小为 16。链表 (Linked List): 当发生哈希冲突时&#xff0c;即不同的键具有相同的哈希值&#xff0c;HashMap 使用链表来解决冲突。链…

计网之IP

IP IP基本认识 不使用NAT时&#xff0c;源IP地址和目的IP地址不变&#xff0c;只要源MAC和目的MAC地址在变化 IP地址 D类是组播地址&#xff0c;E类是保留地址 无分类地址CIDR 解决直接分类的B类65536太多&#xff0c;C类256太少a.b.c.d/x的前x位属于网路号&#xff0c;剩…

分治精炼宝库-----快速排序运用(⌯꒪꒫꒪)੭

目录 一.基本概念: 一.颜色分类&#xff1a; 二.排序数组&#xff1a; 三.数组中的第k个最大元素&#xff1a; 解法一&#xff1a;快速选择算法 解法二&#xff1a;简单粗暴优先级队列 四.库存管理Ⅲ&#xff1a; 解法一&#xff1a;快速选择 解法二&#xff1a;简单粗…

Github 2024-06-21 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-21统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Python项目3Java项目2非开发语言项目2JavaScript项目1Rust项目1Dart项目1HTML项目1Vue项目1C++项目1TensorFlow: 机器学习的开源…

【Linux】IO多路复用——select,poll,epoll的概念和使用,三种模型的特点和优缺点,epoll的工作模式

文章目录 Linux多路复用1. select1.1 select的概念1.2 select的函数使用1.3 select的优缺点 2. poll2.1 poll的概念2.2 poll的函数使用2.3 poll的优缺点 3. epoll3.1 epoll的概念3.2 epoll的函数使用3.3 epoll的优点3.4 epoll工作模式 Linux多路复用 IO多路复用是一种操作系统的…

算力时代,算能(SOPHGO)的算力芯片/智算板卡/服务器选型

数字经济时代&#xff0c;算力成为支撑经济社会发展新的关键生产力&#xff0c;全球主要经济体都在加快推进算力战略布局。随着大模型持续选代&#xff0c;模型能力不断增强&#xff0c;带来算力需求持续增长。算力对数字经济和GDP的提高有显著的带动作用&#xff0c;根据IDC、…

EasyExcel数据导入

前言&#xff1a; 我先讲一种网上信息的获取方式把&#xff0c;虽然我感觉和后面的EasyExcel没有什么关系&#xff0c;可能是因为这个项目这个操作很难实现&#xff0c;不过也可以在此记录一下&#xff0c;如果需要再拆出来也行。 看上了网页信息&#xff0c;怎么抓到&#x…

C++:typeid4种cast转换

typeid typeid typeid是C标准库中提供的一种运算符&#xff0c;它用于获取类型的信息。它主要用于类型检查和动态类型识别。当你对一个变量或对象使用typeid运算符时&#xff0c;它会返回一个指向std::type_info类型的指针&#xff0c;这个信息包含了关于该类型名称、大小、基…

【嵌入式Linux】i.MX6ULL 时钟树——理论分析

文章目录 0. 时钟树结构0.1 参考手册 Chapter 18​: Clock Controller Module (CCM)0.2 时钟信号路径 1. 时钟源——晶振1.1 外部低频时钟 - CKIL1.1.1 CKIL 同步到 IPG_CLK 解释 1.2 外部高频时钟 - CKIH 和 内部振荡器1.3 总结1.4 缩写补充 2. PLL时钟2.1 i.MX6U 芯片 PLL 时…

【ESP32】打造全网最强esp-idf基础教程——14.VFS与SPIFFS文件系统

VFS与SPIFFS文件系统 这几天忙着搬砖&#xff0c;差点没时间更新博客了&#xff0c;所谓一日未脱贫&#xff0c;打工不能停&#xff0c;搬砖不狠&#xff0c;明天地位不稳呀。 不多说了&#xff0c;且看以下内容吧~ 一、VFS虚拟文件系统 先来看下文件系统的定义&#x…

力扣SQL50 连续出现的数字 distinct

Problem: 180. 连续出现的数字 &#x1f468;‍&#x1f3eb; 力扣官解 Code SELECT DISTINCTl1.Num AS ConsecutiveNums FROMLogs l1,Logs l2,Logs l3 WHEREl1.Id l2.Id - 1AND l2.Id l3.Id - 1AND l1.Num l2.NumAND l2.Num l3.Num ;

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;框架是一种架构模式&#xff0c;用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构&#xff0c;提高代码的可维护性…

简单体验一下AI训练的过程

推荐一个站点 http://playground.tensorflow.org 有什么优点呢 这个是tensorflow官方的体验站点&#xff0c;以图形化的方式给出了训练过程中所需的各种因素。

帝国CMS(EmpireCMS)漏洞复现

简介 《帝国网站管理系统》英文译为Empire CMS&#xff0c;简称Ecms&#xff0c;它是基于B/S结构&#xff0c;且功能强大而帝国CMS-logo易用的网站管理系统。 帝国CMS官网&#xff1a;http://www.phome.net/ 参考相关漏洞分析文章&#xff0c;加上更详细的渗透测试过程。 参考…

计算机网络之体系结构

上节内容&#xff1a;数据通信原理 1.计算机网络体系结构 体系结构: 研究系统中各组成成分及其关系的一门学科。 计算机网络体系结构: 定义和描述一组用于计算机及其通信设施之间互连的标准和规范的集合&#xff0c;遵循这组规范可以很方便地实现计算机设备之间的通信。 相互…

车联网全方位安全适配与领先架构

设想一下如下场景&#xff1a; 您钟爱的座驾&#xff0c;在毫无外力破坏迹象的情况下&#xff0c;突然被侵入&#xff0c;远程启动&#xff0c;然后绝尘而去… 别以为这只是大银幕上的虚构桥段&#xff0c;事实上&#xff0c;这一幕在现实中已经上演。 某款备受欢迎的车型&a…

通讯:单片机串口和电脑通讯

目录 1.串口输出数据到电脑 硬件部分 串口输出数据到电脑的软件软件部分&#xff1a; 相关问题&#xff1a; 2.单片机串口--485--485转USB--电脑 串口&#xff0c;芯片&#xff0c;转换器&#xff0c;设备之间的通讯的接线&#xff0c;都是要TX--RX, RX--TX 交叉连接。 单…

论文阅读_优化RAG系统的检索

英文名称: The Power of Noise: Redefining Retrieval for RAG Systems 中文名称: 噪声的力量&#xff1a;重新定义RAG系统的检索 链接: https://arxiv.org/pdf/2401.14887.pdf 作者: Florin Cuconasu, Giovanni Trappolini, Federico Siciliano, Simone Filice, Cesare Campag…

MySQL周内训参照3、简单查询与多表联合复杂查询

基础查询 1、查询用户信息&#xff0c;仅显示用户的姓名与手机号&#xff0c;用中文显示列名。中文显示姓名列与手机号列 SELECT user_id AS 编号, phone AS 电话 FROM user; 2. 根据订购表进行模糊查询&#xff0c;模糊查询需要可以走索引&#xff0c;需要给出explain语句。…

基于bootstrap的12种登录注册页面模板

基于bootstrap的12种登录注册页面模板&#xff0c;分三种类型&#xff0c;默认简单的登录和注册&#xff0c;带背景图片的登录和注册&#xff0c;支持弹窗的登录和注册页面html下载。 微信扫码下载