C语言数据结构易错知识点(5)(插入排序、选择排序)

插入排序:直接插入排序、希尔排序

选择排序:直接选择排序、堆排序

上述排序都是需要掌握的,但原理不会讲解,网上有很多详尽地解释,本文章主要分享一下代码实现上应当注意的事项

1.直接插入排序:

代码实现


void InsertSort(int* arr, int size)
{for (int j = 0; j < size - 1; j++){int end = j;int tmp = arr[end + 1];for (int i = end; i >= 0; i--){if (arr[i] > tmp){arr[i + 1] = arr[i];end--;}elsebreak;}arr[end + 1] = tmp;}
}

a.部分细节注意点:

b.循环逻辑不清:

2.希尔排序:

代码实现


void ShellSort(int* arr, int size)
{int gap = size;while (gap != 1){gap /= 2;for (int j = 0; j < size - gap; j++){int end = j;int tmp = arr[end + gap];for (int i = end; i >= 0; i -= gap){if (arr[i] > tmp){arr[i + gap] = arr[i];end -= gap;}elsebreak;}arr[end + gap] = tmp;}}
}

希尔排序其实是直接插入排序的一种变形。引入gap保证数组更快地变得有序。

a.循环逻辑混乱:

b.和直接插入排序的区别点:

c.时间复杂度简要分析:

3.直接选择排序:

代码实现


void SelectSort(int* arr, int size)
{int maxi = 0, mini = 0;int start = 0, end = size - 1;while (start < end){mini = maxi = start;for (int i = start; i <= end; i++){if (arr[i] < arr[mini])mini = i;if (arr[i] > arr[maxi])maxi = i;}swap(&arr[mini], &arr[start]);if (maxi != start){swap(&arr[maxi], &arr[end]);end--;}start++;}
}

a.细节

4.堆排序

代码实现:


void AdjustDown(int* arr, int size, int parent)
{int child = parent * 2 + 1;if (child + 1 < size && arr[child + 1] > arr[child])child++;while (child < size){if (arr[child] > arr[parent]){swap(&arr[child], &arr[parent]);parent = child, child = parent * 2 + 1;if (child + 1 < size && arr[child + 1] > arr[child])child++;}elsebreak;}
}void HeapSort(int* arr, int size)
{for (int i = (size - 2) / 2; i >= 0; i--){AdjustDown(arr, size, i);//建大堆}while (size > 1){swap(&arr[0], &arr[size - 1]), size--;AdjustDown(arr, size, 0);}}

a.每次选出最大值的代码实现:

b.循环逻辑:

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

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

相关文章

拥抱C++的深度和复杂性,挖掘更多可能 !——《C++20高级编程(第5版)》

&#xff0c;C难以掌握&#xff0c;但其广泛的功能使其成为游戏和商业软件应用程序中最常用的语言。即使是有经验的用户通常也不熟悉许多高级特性&#xff0c;但C20的发布提供了探索该语言全部功能的绝佳机会。《C20高级编程(第5版)》为C的必要内容提供了一个代码密集型、面向解…

Redis 教程系列之Redis Java 使用 Redis(十一)

安装 开始在 Java 中使用 Redis 前&#xff0c; 我们需要确保已经安装了 redis 服务及 Java redis 驱动&#xff0c;且你的机器上能正常使用 Java。 Java的安装配置可以参考我们的 Java 开发环境配置 接下来让我们安装 Java redis 驱动&#xff1a; 首先你需要下载驱动包 下载…

Qt笔记 计时器

下面介绍设计计时器的两种方法&#xff0c;分别是利用信号与槽来使用计时器&#xff0c;利用计时器事件来使用计时器。 1. 利用信号与槽来使用计时器 //方法一(利用信号与槽来使用计时器):QTimer *timer new QTimer(this);timer->start(1000);//周期&#xff0c;计时器每隔…

(AtCoder Beginner Contest 325) ---- D - Printing Machine -- 题解

目录 D - Printing Machine&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 代码实现&#xff1a; D - Printing Machine&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 打印一次后&#xff0c;需要充电一微秒后才能再次打印就可以看作每微妙只能打印一…

【文献阅读】AlphaFold touted as next big thing for drug discovery — but is it?

今天来精读2023年10月发在《Nature》上的一篇新闻&#xff1a;AlphaFold touted as next big thing for drug discovery — but is it? (nature.com)https://www.nature.com/articles/d41586-023-02984-w Questions remain about whether the AI tool for predicting protein …

蓝桥杯基础练习详细讲解二(具体代码、解题思路、Python)

试题 基础练习 回文数 提交此题 评测记录 资源限制 内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 1221是一个非常特殊的数&#xff0c;它从左边读和从右边读是一样的&#x…

Day29:学习SpringCloud

学习计划&#xff1a;完成尚硅谷的尚上优选项目 学习进度&#xff1a;完成尚上优选项目的前置知识点&#xff1a;SpringCloud 知识点&#xff1a; MQ高级 消息可靠性 生产者消息确认消息持久化消费者消息确认消费失败重试机制 死信交换机 初识死信交换机TTL延迟队列

C语言从入门到实战----C语言中内存函数的使用和模拟实现

目录 前言 1.memcpy 使用和模拟实现 2. memmove 使用和模拟实现 3. memset 函数的使用 4. memcmp 函数的使用 前言 在编程领域&#xff0c;内存管理是至关重要的一环&#xff0c;它确保了程序能够高效、稳定地运行。 C语言作为一门底层的编程语言&#xff0c;提供了一系…

Redis 教程系列之Redis 集群配置(十三)

1.Redis集群方案比较 主从模式 在软件的架构中,主从模式(Master-Slave)是使用较多的一种架构。主(Master)和从(Slave)分别部署在不同的服务器上,当主节点服务器写入数据时,同时也会将数据同步至从节点服务器,通常情况下,主节点负责写入数据,而从节点负责读取数据。…

Apollo9.0使用过程中遇到的错误及解决办法

1、编译过程中提示Socket closed导致编译未完成 Server terminated abruptly (error code: 14, error message: Socket closed, log file: /apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/server/jvm.out)硬件资源耗尽导致OOM&#xff0c;可以自行修改脚本来控制编译…

橘子疾病检测4种YOLOV8

橘子检测YOLOV8&#xff0c;检测4种疾病&#xff0c;采用YOLOV8-NANO&#xff0c;训练得到PT模型转换成ONNX&#xff0c;最后OPENCV调用&#xff0c;支持C/PYTHON/ANDROID 橘子检测YOLOV8&#xff0c;检测4种疾病

2025汤家凤考研数学视频,基础网课百度网盘课程+PDF讲义资料

2025汤家凤大神及数学全程 docs.qq.com/doc/DTmtOa0Fzc0V3WElI 复制粘贴到浏览器&#xff0c;可以见所有的Ke 第一轮 夯实基础 1.阅读大纲考查要求&#xff0c;明确每章的学习目标&#xff1b; 2.按节学习数学理论基础知识&#xff0c;吃透书中例题&#xff1b; 3.学习每章…

Analysis of Negative Sampling Methods for Knowledge Graph Embedding

摘要 负采样是一种用于加速知识图嵌入学习和最大化嵌入模型在链接预测和实体解析等支持任务中的有效性的方法。负采样对于提高准确性、减少偏差、提高效率和改善代表性至关重要。本文仔细研究了在基准数据集Fb15k上&#xff0c;张量分解和平移嵌入模型的两种基本负采样技术增加…

【C语言】数组(一维、二维数组的简单介绍)

数组&#xff08;Array&#xff09; 数组概念 数组是一组相同数据类型元素的集合&#xff0c;属于一种简单的数据结构&#xff0c;从中可以得到三个有效信息 数组元素是同一数据类型的变量数组存放一个或者多个数据&#xff0c;但是数组元素个数不能为0数组中各元素可独立作为…

unity 动态获取Animator 状态机中某个动画片段的播放速度(获取到速度来计算 播放时长)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言获取某个动画片段的播放速度&#xff0c;并且得到播放时长1.获取速度2.计算时长 总结 前言 这个功能主要是因为 每个动画片段的播放速度不一样&#xff0c;需要…

【Web APIs】DOM节点

目录 1.节点操作 1.1DOM节点 1.2查找节点 1.2.1父节点查找 1.2.2子节点查找 1.2.3兄弟节点查找 1.3增加节点 1.4克隆节点 1.5删除节点 2.时间对象 2.1实例化 2.2时间对象方法 2.3时间戳 3.重绘和回流 1.节点操作 1.1DOM节点 DOM节点&#xff1a;DOM树中的每一个…

CHAT~(持续更新)

CHAT&#xff08;持续更新&#xff09; 实现一个ChatGPT创建API设计页面布局业务操作技术架构 编码其他 实现一个ChatGPT 创建API 最简单也最需要信息的一步 继续往下做的前提 此处省略&#xff0c;想要获取接口创建方式联系 设计 页面布局 按照官网布局 业务操作 注册登…

绝地求生:PUBG七周年庆典开启!参与周年话题投稿赢丰厚奖励

为庆祝七周年&#xff0c;闲游盒PUBG官方准备了众多活动与奖励&#xff0c;一起在庆典中创造难忘的回忆吧&#xff01;七周年庆典期间游玩PUBG&#xff0c;参与 #乐在7中鸡味无穷# 周年话题投稿&#xff0c;即有机会赢取魔力甜心萨莉套装 2奖励。 参与方式 在小黑盒PUBG社区中…

贪心算法相关题目

文章目录 1. 什么是贪心&#xff1f;2. 分发饼干3. 摆动序列4. 最大子数组和5. 买卖股票的最佳时机 II6. 跳跃游戏7. 跳跃游戏 II8.K 次取反后最大化的数组和9.加油站10.分发糖果11.柠檬水找零 1. 什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而…

Python数据分析一

一、Python之输出函数和输入函数 Python中的输出函数和输入函数分别是print()和input()。 输出函数 print() print()函数用于将数据打印到标准输出&#xff08;通常是控制台&#xff09;&#xff0c;以便用户查看。它可以接受一个或多个参数&#xff0c;并在打印时使用空格分隔…