数据结构-顺序表的交换排序

 顺序表的初始化

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

 冒泡排序

        分析:

        顺序表的冒泡排序和数组的冒泡排序的原理相同。通过不停比较相邻两个数据,如果不满足排序要求就交换两个值,直到所有的记录都排好序。

void Bubble_Sort(PSeqList PL)
{for(int i = 1;i <= PL->length;i++)for(int j = 2;j <= 1 + S->length-i;j++)if(PL->r[j].key < PL->r[j-1].key){int temp = PL->r[j];PL->r[j] = PL->r[i];PL->r[i] = temp;}
}

        复杂度:

        空间复杂度

        只使用了一个辅助单元temp,所以空间复杂度是O(1)

        时间复杂度

        通过冒泡排序的算法可知每次交换,循环都需要比较(n-1)次,最多交换(n-i)次,最少交换0次。平均交换(n-i)/2次。

        总的比较次数\sum_{i =1}^{n-1}(n-i)=n(n-1)/2。时间复杂度为O(n^{2})

        总的交换次数\sum_{i-1}^{n-1}(n-i)/2=n(n-1)/4。时间复杂度为O(n^{2})

        因此冒泡排序的总时间复杂度为O(n^{2})

快速排序

        分析:

        快速排序是对冒泡排序的一种改进,它的基本思想是铜鼓哦一趟排序将待排序的数据分割成独立的两个部分,其中一部分比另一部分要小。然后分别对这两部分继续分割,直至整个序列有序。

        使用的方法是双指针法,快速排序并不稳定

        具体操作:

        (1)在序列S中任意选择一个记录r作为轴k

        (2)将剩余的部分分割成两个子序列LR,子序列L中的数据均小于或等于k。子序列R中的数据均大于或者等于k

        (3)将子序列L中所有记录放在记录r左边,子序列R中所有记录放在记录r右边。

        (4)对LR递归直至子序列中只含有0或者1个元素。

int Quick_Elem(PSeqList PL,int l,int h)
{int piv;int p = PL->r[l];                        //取子表的第一个记录为轴记录piv = PL->r[l].key;                      //取轴记录关键字while(l < h){while(l < h && PL->r[h].key >= piv)h--;PL->r[l] = PL->r[h];                 //更新范围while(l < h && PL->r[l].key <= piv)l++;                PL->r[h] = PL->r[l];                 //更新范围}PL->r[l] = p;                            //轴记录return l;
}void Quick_Sort(PSeqList PL,int l,int h)
{int piv;if(l < h){piv = Quick_Elem(PL,l,h);            //分割序列Quick_Sort(PL,l,piv - 1);            //对L递归Quick_Sort(PL,piv + 1,h);            //对R递归}
}

        复杂度:

        空间复杂度

        快速排序有递归操作,每层递归都要使用到栈来存放指针和参数。在理想情况下空间复杂度为O(log_{2}n),最坏情况下空间复杂度为O(n)

        时间复杂度

        理想情况下时间复杂度为O(nlog_{2}n)

        最坏情况下时间复杂度为O(n^{2})

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

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

相关文章

欧盟指控苹果应用商店规则非法压制竞争,面临巨额罚款风险

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

[数据集][目标检测]鸡蛋缺陷检测数据集VOC+YOLO格式2918张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2918 标注数量(xml文件个数)&#xff1a;2918 标注数量(txt文件个数)&#xff1a;2918 标注…

24/06/25(4.1122)数据存储,自定义类型

重点:1.数据类型详细介绍 2.整型在内存中的存储:原码 反码 补码 3.大小端字节序介绍和判断 4.浮点型在内存中的存储解析 前面都有char short int...详细介绍,翻一翻.需要注意的是,C语言没有字符串类型哦. 计算机永远存储的都是补码,计算也是用补码进行的,只有在要输出的时候转…

【websocket】websocket网课视频记录

仅个人方便回顾。 【WebSocket入门与案例实战-哔哩哔哩】 https://b23.tv/2p1f9t2 课程对应代码仓库: https://gitee.com/duoli-java/websocket-demo.git

第二期书生·浦语大模型实战营优秀项目一览

书生浦语社区于 2023 年年底正式推出了书生浦语大模型实战营系列活动&#xff0c;至今已有两期五批次同学参加大模型学习、实战&#xff0c;线上课程累计学习超过 10 万人次。 实战营特设项目实践环节&#xff0c;提供 A100 算力支持&#xff0c;鼓励学员动手开发。第 2 期实战…

JAVA每日作业day6.25

ok了家人们今天我们学习了&#xff0c;接口这个知识&#xff0c;我们闲话少叙&#xff0c;一起看看吧。 一&#xff0c;接口 1.1 接口概述 接口是功能的集合。接口的内部主要就是定义方法&#xff0c;包含常量&#xff0c;抽象方法&#xff08;JDK 7及以前&#xff09;&#…

Mac安装多版本node

Mac下使用n模块去安装多个指定版本的Node.js&#xff0c;并使用命令随时切换。 node中的n模块是&#xff0c;node专门用来管理node版本的模块&#xff0c;可以进行node版本的切换&#xff0c;下载&#xff0c;安装。 1.安装n npm install -g n 2.查看版本 n --version 3.展…

SSH的基本使用

文章目录 1. SSH使用介绍2. 如何配置OpenSSH Client和OpenSSH Server2.1 Windows系统配置2.2 Linux系统配置2.2.1. 安装OpenSSH服务2.2.2. 启动和检查SSH服务 3. SSH具体使用方式4. vscode中使用ssh远程连接 1. SSH使用介绍 SSH 最常见的用途是通过加密连接在不安全的网络中进…

①分析胃癌组蛋白脱乙酰酶HDS模型-配对转录组差异

目录 HDS评分构建 ①数据加载 ②评分计算 做样本及评分展示图 ①数据处理 ②进行作图 分析配对的单细胞及转录组胃癌数据的 HDS评分,数据源于gastric-cancer - GitCode①胃癌单细胞和配对转录组揭示胃肿瘤微环境(文献和数据)_代码笔记:处理迄今为止最大的单细胞胃癌数…

vue3中h函数的使用

h函数是用于创建一个 vnodes &#xff0c;它既可以用于创建原生元素&#xff0c;也可以创建组件&#xff0c;其渲染后的效果等同于使用模版语言来进行创建。 h函数的传参如下&#xff1a; // 完整参数签名 function h(type: string | Component,props?: object | null,child…

Python笔记 文件的写,追加,备份操作

一、文件的写操作 案例演示&#xff1a; # 1.打开文件 f open(python.txt,w)# 2.文件写入 f.write(hello world)# 3.内容刷新 f.flush() 注意&#xff1a; 直接调用write&#xff0c;内容并为真正的写入文件&#xff0c;二十会积攒在程序的内存中&#xff0c;称之为缓冲区…

百度智能云千帆推出大模型普惠计划,0成本切换

百度智能云千帆推出大模型普惠计划&#xff0c;0成本切换至国内调用量第一的大模型平台。场景更丰富、模型更全面、工具链更完整易用、更安全可靠&#xff01; 即日起为新注册企业用户提供&#xff1a; 0元调用&#xff1a; 文心旗舰模型首次免费&#xff0c;赠送ERNIE3.5旗舰模…

PDF编辑软件pdf转word工具Acrobat DC百度云盘分享

如大家所了解的&#xff0c;Adobe Acrobat DC是一款高级PDF文档编辑和管理软件&#xff0c;它整合了创建、编辑、共享和签署PDF文件的强大功能。这款软件为用户提供了一系列高效的工具&#xff0c;使得处理PDF文件变得异常简单&#xff0c;大幅提升办公效率。 Acrobat DC软件核…

【Linux】性能分析器 perf 详解(一)

1、简介 perf 是由 Linux 官方提供的系统性能分析工具 。它包含两部分: perf_events ,Linux 内核中的一个子系统perf 命令,用户空间的应用程序内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持,它以事件驱动型的方式工作,通过…

HTTP性能测试工具 —— wrk!

wrk性能测试工具详解 wrk是一款轻量级但功能强大的HTTP基准测试工具&#xff0c;主要用于在单机多核CPU环境下对HTTP服务进行性能测试。它通过利用系统自带的高性能I/O机制&#xff08;如epoll、kqueue等&#xff09;&#xff0c;结合多线程和事件模式&#xff0c;能够产生大量…

JavaWeb——MySQL:DDL

目录 3.DQL&#xff1a;查询 3.5 分页查询 ​编辑 总结&#xff1a; 3. DQL&#xff1a;查询 查询是使用最多、最频繁的操作&#xff0c;因为前面的修改以及删除&#xff0c;一般会交给数据库专业的人员&#xff0c;对于非数据库专业人员来说&#xff0c;老板一般会放心的…

[DALL·E 2] Hierarchical Text-Conditional Image Generation with CLIP Latents

1、目的 CLIP DDPM进行text-to-image生成 2、数据 (x, y)&#xff0c;x为图像&#xff0c;y为相应的captions&#xff1b;设定和为CLIP的image和text embeddings 3、方法 1&#xff09;CLIP 学习图像和文本的embedding&#xff1b;在训练prior和decoder时固定该部分参数 2&a…

使用npm报npm ERR code EPERMnpm ERR syscall rename错误

使用npm install初始化时报错&#xff0c; 解决结果是&#xff1a;node版本不对&#xff0c;切换node版本

基于 Redis 实现秒杀资格判断,提升并发性能

在互联网电商平台上&#xff0c;秒杀活动往往会吸引大量用户同时抢购&#xff0c;如何高效地处理高并发请求&#xff0c;保证用户体验&#xff0c;是一个重要的技术挑战。本文将介绍如何基于 Redis 实现秒杀资格的判断&#xff0c;提高并发性能。 基本思路 秒杀活动的核心流程…

规则引擎-Aviator 表达式校验是否成立

目录 介绍特性使用更多文献支持 介绍 Aviator是一个轻量级、高性能的Java表达式执行引擎&#xff0c;它动态地将表达式编译成字节码并运行。 特性 支持绝大多数运算操作符&#xff0c;包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(~)、三元表达式(?:…