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--;
			}
			else
				break;
		}

		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;
				}
				else
					break;
			}

			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++;
		}
		else
			break;
	}
}

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.mfbz.cn/a/485714.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FastWiki(增强AI对话功能)企业级智能客服功能介绍

知识库对话功能 什么是知识库对话&#xff1f; 我们需要找到AI的知识能力是有限的他们的知识都截止于他们训练数据的时间&#xff0c;你提问他们更新的数据的时候他们就会出现乱回复。而知识库则是利用Prompt给于AI更多的知识从而让他回复更准确&#xff0c; 以下就是知识库的…

如何通过idea搭建一个SpringBoot的Web项目(最基础版)

通过idea搭建一个SpringBoot的Web项目 文章目录 通过idea搭建一个SpringBoot的Web项目一、打开idea&#xff0c;找到 create new project二、创建方式三、配置项目依赖四、新建项目模块五、总结 一、打开idea&#xff0c;找到 create new project 方式1 方式2 二、创建方式 新…

更换 Jenkins 插件下载源(解决 Jenkins 插件安装失败)【图文详细教程】

Jenkins 插件安装失败的情况 这里提一下&#xff0c;Jenkins 插件安装失败&#xff0c;不一定是下载源的问题&#xff0c;还有可能你下载的 Jenkins 的版本与插件的版本不匹配&#xff0c;Jenkins 的版本较低&#xff0c;而安装的插件是为新的 Jenkins 版本准备的&#xff0c;此…

领域、系统和组织-《实现领域驱动设计》中译本评点-第2章(4)

相关链接 DDD领域驱动设计批评文集>> 汪峰哭晕在厕所-《实现领域驱动设计》中译本评点-第2章&#xff08;1&#xff09; 可不是乱打的-《实现领域驱动设计》中译本评点-第2章&#xff08;2&#xff09; “领域”的错误定义-《实现领域驱动设计》中译本评点-第2章&…

牛客题霸-SQL篇(刷题记录三)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多&#xff0c;因此本文不再展示&#xff0c;只提供 MySQL 代码与示例输出。 以下内容是…

笔试总结01

1、spring原理 1、spring原理 spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中&#xff0c;程序在运行时根据配置文件动态加载依赖的类&#xff0c;降低的类与类之间的藕合度。它的原理是在applicationContext.xml加入bean标记,在bean标记中通过class属性说明具体类…

Mamba 基础讲解【SSM,LSSL,S4,S5,Mamba】

文章目录 Mamba的提出动机TransformerRNN Mama的提出背景状态空间模型 (The State Space Model, SSM)线性状态空间层 (Linear State-Space Layer, LSSL)结构化序列空间模型 &#xff08;Structured State Spaces for Sequences, S4&#xff09; Mamba的介绍Mamba的特性一&#…

天软高频因字库——委托订单因子及资金流向因子发布

天软始终致力于构建完善而丰富的因子库服务体系&#xff0c;陆续推出了股票因子、基金因子、指数因子等众多因子数据及评价数据。 本月天软推出高频委托订单&资金流向相关因子&#xff0c;继续补充和完善天软高频特色因子库&#xff0c;至此该因子库已包含36个因子表单&…

基于SpringBoot+Vue共享客栈管理系统(源码+部署说明+演示视频+源码介绍+lw)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

Pycharm配置conda

1.下载conda Free Download | Anaconda . 2.配置环境 1.conda自带base环境 2.创建环境 3. Pycharm创建项目&#xff0c;选择环境 3.Pycharm中新建conda环境

win11 安装SIBR 3dgs

1.安装显卡驱动 下载地址&#xff1a; 官方驱动 | NVIDIA下载适用于 GeForce、TITAN、NVIDIA RTX、数据中心、GRID 等 NVIDIA 产品的新驱动。https://www.nvidia.cn/Download/index.aspx?langcn 2.安装cuda 下载地址&#xff1a;如果无法打开&#xff0c;切换.com为.cn&am…

AD20如何整体修改元器件标号?

1 2这里可以设置元器件标号方向 3更新 4点击前两个选项&#xff08;生成&#xff0c;执行&#xff09;即可

【Linux】nmcli命令详解

目录 ​编辑 一、概述 二、常用参数使用 2.1 nmcli networking 1.显示NM是否接管网络 2.查看网络连接状态 3.开/关网络连接 2.2 general ​编辑 1.显示系统网络状态 2.显示主机名 3.更改主机名 2.3 nmcli connection ​编辑1.显示所有网络连接 2.显示某个网卡的…

Day08 Java复习8 Spring MVC概念

Day09 Java复习9 Spring MVC spring mvc 的核心组件是什么&#xff1f; DispatcherServlet 1.JAVA 和Spring 、Spring Boot 、Spring MVC的关系 你要举办一个生日派对&#xff0c;而且你希望它既特别又好玩。Java就像是举办派对的地方&#xff0c;Spring、Spring Boot和Spri…

YOLOv5全网独家改进: 注意力机制改进 | 维度感知选择性集成模块DASI,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:维度感知选择性集成模块DASI,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv5原创自研 https://…

【正点原子Linux连载】第十九章 设备树下的platform驱动编写 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第十九…

PSO-CNN-BiLSTM多输入回归预测|粒子群优化算法-卷积-双向长短期神经网络回归预测|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

软件设计不是CRUD(15):低耦合模块设计理论——行为抽象与设计模式(中)

接上文《软件设计不是CRUD(14):低耦合模块设计理论——行为抽象与设计模式(上)》 3.2、行为抽象中常见的控制逻辑形式 上文我们讨论了在功能的整个控制逻辑中,针对一个业务控制点上的控制方式,可以通过何种行为抽象的方式找到对应的设计模式并最终将需求转换为具有较强…

vue基础——java程序员版(总集)

前言&#xff1a; ​ 这是一个java程序员的vue学习记录。 ​ vue是前端的主流框架&#xff0c;按照如今的就业形式作为后端开发的java程序员也是要有所了解的&#xff0c;下面是本人的vue学习记录&#xff0c;包括vue2的基本使用以及引入element-ui&#xff0c;使用的开发工具…

爬楼梯C语言

方法一&#xff1a;动态规划 int climbStairs(int n) {int f[100] {0};f[0] 0;f[1] 1;f[2] 2;for(int i 3;i<n;i)f[i] f[i-1] f[i-2];//可能是从i-1阶爬上第i阶&#xff0c;也有可能是从i-2阶 return f[n]; } 方法二&#xff1a;滚动数组 int climbStairs(int n){int…