《C游记》 第肆章 - 悟彻数组真妙理 巧用下标破万敌(贰)

简介: 《C游记》 第肆章 - 悟彻数组真妙理 巧用下标破万敌(贰)

1.gif


目录

(壹)  冒泡排序

🎨  1.1  冒泡排序的设计

🎨  1.2  冒泡排序的步骤

🎨  1.3  冒泡排序的实现

(贰)  数组作为函数参数

🎨  2.1  冒泡排序函数的错误设计

🎨  2.2  冒泡排序函数的正确设计

(叁) 对数组名的拓展解析


🎪    《C游记》


(壹)  冒泡排序

🎨  1.1  冒泡排序的设计

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。


🎨  1.2  冒泡排序的步骤

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

📺动图演示1(数据较小)1.gif


📺动图演示2(数据较大)2.gif


🎨  1.3  冒泡排序的实现

Tips:每一趟冒泡排序后都会减少一个需要比较的数 -->  因为每一趟的冒泡排序都会将所比较的最大/最小值移动到数组的最后面

1.png


2.png3.gif


(贰)  数组作为函数参数

往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数将一个整形数组排序。 那我们将会这样使用该函数:


🎨  2.1  冒泡排序函数的错误设计

接下来看一个例子


10.png11.png最后结果:12.png

并没有预料中的达到排序的作用


在我们之前的学习中,我们知道了 数组名表示的数组首元素的地址

数组名在传递给函数的时候,会降级变成首元素的地址13.png14.png


15.png16.png

  1. 数组名单独放在sizeof内部的时候 ,如:sizeof(arr),这里的arr表示整个数组而不是首元素的地址
  2. 对数组名进行&取地址后的操作对数组名进行&取地址后的操作

我们知道,对指向数组元素的指针进行自增运算是跳过一个元素(所占字节数的地址),其实本质是跳过一个其指针类型大小对数组名进行取地址后获得的是数组的地址,如果将它和数组首元素地址以及数组名打印出来,会发现它们的值是一样的。但如果对&arr进行+1等操作,就会发现跳过的不是一个元素的大小,而是一个数组的大小。31.png


🎨  2.2  冒泡排序函数的正确设计

当数组传参的时候,实际上只是把数组的首元素的地址传递过去了。所以即使在函数参数部分写成数组的形式:int arr[]表示的依然是一个指针:int *arr。那么,函数内部的sizeof(arr)结果是4。32.png


33.png


34.png35.gif

(叁) 对数组名的拓展解析

数组名就是首元素的地址,但是有两个例外

  1. sizeof(数组名),这里的数组名表示整个数组,sizeof(数组名)表示的是整个数组的大小
  2. &数组名,这里的数组名表示的是整个数组,取出的是整个数组的地址35.png

36.png &arr取出的是整个数组的地址,所以 arr + 1后跳过了整个数组的大小为

4 * 10 = 40 个字节的地址大小


C游记之旅至此,大家也掌握了一定的技能,推荐大家可以跟着下面这篇文章,去实现一个属于自己的三子棋游戏哦

**【入门级C语言小游戏】——“三子棋” 【万字保姆级教学】**_forever_bryant的博客-CSDN博客_三子棋


111.gif29.gif

目录
相关文章
|
6天前
|
数据采集 人工智能 安全
|
16天前
|
云安全 监控 安全
|
2天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
263 155
|
3天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:六十九、Bootstrap采样在大模型评估中的应用:从置信区间到模型稳定性
Bootstrap采样是一种通过有放回重抽样来评估模型性能的统计方法。它通过从原始数据集中随机抽取样本形成多个Bootstrap数据集,计算统计量(如均值、标准差)的分布,适用于小样本和非参数场景。该方法能估计标准误、构建置信区间,并量化模型不确定性,但对计算资源要求较高。Bootstrap特别适合评估大模型的泛化能力和稳定性,在集成学习、假设检验等领域也有广泛应用。与传统方法相比,Bootstrap不依赖分布假设,在非正态数据中表现更稳健。
200 105
|
9天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
680 5
|
12天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
805 152