4-C语言-冒泡排序以及数组名的使用

2023-11-02

问题:

        给数组进行从小到大的升序排序。

思想:

  1. 一般给冒泡排序,进行封装,写成一个函数。
  2. 这就需要让数组传进去,而传数组,实际传的数组的首元素的地址,因此如果在冒泡内部,进行数组数据个数的计算,用sizeof(a)/sizeof(a[0]);实际上为1/1=1,因为这里面的a,不是数组名,而是元素首地址,代表不了整个数组。
  3. 对于数组名,如 int a[10];只有在主函数中,sizeof(a)和&a,的时候,代表整个数组,此外&a+1.则是表示数组末尾元素地址,直接跨越整个数组。其他情况,统统表示元素首地址。
  4. 因此,给数组传参时,bubble_sort(a),则传的a的首元素地址。这样传进函数的,就是个指针变量,int *a,此时指针在64位操作系统下时8个字节,在32位操作系统下4个字节。而int a[0]则是数组变量,int型数组,一个变量位4字节。
  5. 因此,我们需要在主函数内,给数组内数据个数算出来,然后传进函数,
  6. 之后写冒泡排序。总共需要冒泡n-1趟,而每一趟,都需要从头到尾挨个对比,每一趟都会少对比一个,因为每一趟结束后,数值大的到了最后,第二天就不用管他了,因此每次少1.
  7. 此外,为了优化。不是所有数组都是无序的,有的只有一个数字有错,却还是要全部趟次对比完。
  8. 因此,在每趟对比前,定义个flag,记录是否发生改变,如果发生改变,flag变为0,否则变为1,证明该数组内,数字有序了,直接break跳出,不执行后面操作。
  9. 冒泡排序大致思路:一维数组排序,两个for循环,外循环时运行的总趟数,内循环,则是进行数组的实际对比,每趟进行时,两两比较,如果比它小,则交换位置,数大的往后跑,每趟结束后,此趟的数落在最后,就不用动了,因此下一趟对比,就不用管它了,所以每次对比数少1.

代码如下:

#include <stdio.h>
void bubble_sort(int *a,int n)
{
	int i, j;
	for (i = 0; i < n - 1; i++)
	{
		int flag = 1;
		for (j = 0; j < n - 1 - i; j++)
		{
			if (a[j] > a[j + 1])
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j+ 1] = temp;
				flag = 0;
			}
		}

		if (flag == 1)//如果,数组中,已经不需要比大小了,直接跳出,不需要给趟数跑完,因为每一趟,都在检查数组内元素是否大于小于,
			break;
	}
}
int main()
{
	int a[10] = {5,2,3,6,4,8,9,5,6,23};

	int sz = sizeof(a) / sizeof(a[0]);

	int p;
	for (p = 0; p < sz; p++)
	{
		printf("%d ", a[p]);
	}
	printf("\n");
	bubble_sort(a,sz);
	int i;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4-C语言-冒泡排序以及数组名的使用 的相关文章

随机推荐

  • 见习网工之综合实验

    需求一 信息中心配置Eth trunk实现链路冗余 SW1 interface Eth Trunk1 mode lacp static least active linknumber 1 trunkport GigabitEthernet
  • 【每日一练】在JSX中使用条件渲染

    条件渲染 技术方案 三元表达式 逻辑 运算 1 三元表达式 满足条件才渲染一个span标签 const flag true function App return div flag div h1 span 我是JackWoot span h
  • 自动化测试如何做?接口自动化测试如何才能做好?

    前言 接口自动化测试常用框架 Python requests pytest yaml alluer Jenkins 接口自动化测试的目的 自动化测试的主要目的是用来回归测试的 当代码有变化时 有可能影响不应该变化的逻辑 这个时候为了确认这种
  • There was a problem importing one of the Python modules required to run yum

    为什么80 的码农都做不了架构师 gt gt gt 最近从python 2 6 升级到python2 7 导致 yum 不可用 原因主要是yum 不支持python27 因此需要更改yum的可用路径 which yum 查看下yum的安装路
  • js拖拽实现

  • 强化学习的A3C算法应用(训练Atari游戏)

    A3C算法的全称是Asynchronous Advantage Actor Critic 异步优势执行者 评论者算法 这个算法和优势执行者 评论者算法的区别在于 在执行过程中不是每一步都更新参数 而是在回合结束后用整个轨迹进行更新 因此可以
  • 多个git合并,并保留log历史记录

    面临的需求是 将多个git仓库作为一个单独目录 整合到一个新的git仓库中 并且保留历史记录 1 新建一个summary仓库 新建一个summary仓库 用于整合一系列git仓库 git clone
  • openwrt编译x86固件

    x86 openwrt固件编译 2017年十月四日我在珠海 中秋之际写下这篇文章 祝各位看官花好月圆 有情人终成眷属 最近一直在玩Openwrt 以前上学的时候接触一丁丁 但是只限于烧写别人编译好的固件 这次要真刀实干了 学习了一周各种百度
  • 专访用自己姓氏命名编译器YC++的创始人

    在CSDN的论坛里看到了这样的一条帖子 请使用中国人开发的C C 编译器 网页浏览器内核 并提供了该软件的下载地址 从大家的跟帖来看很多人 是很有兴趣的 但是作者并没有留下太多的介绍说明类的文字 为了一探究竟 我拨通了作者留下的电话并完成了
  • Ubuntu 16.04设置root用户登录图形界面

    Ubuntu默认的是root用户不能登录图形界面的 只能以其他用户登录图形界面 这样就很麻烦 因为权限的问题 不能随意复制删除文件 用gedit编辑文件时经常不能保存 只能用vim去编辑 下面以Ubuntu 16 04版为例说明 1 打开终
  • STM32实战项目:HAL_RCC_OscConfig中程序卡死问题解决办法

    STM32实战项目经验 HAL RCC OscConfig中程序卡死问题解决办法 工程环境 STM32CUBEIDE STM32F405VG 现象复现 项目中一个是IAP程序 另一个是APP程序 两个程序都是使用STM32CubeIDE生成
  • 搜索题目综合

    BFS 1 小X学游泳 题解 枚举每一个点作为连通块的起点 求得连通块大小 然后打擂台求最值即可 参考代码 include
  • element-ui和element-plus的自定义列表格用法

    前言 element plus 这个 UI 组件库 虽说基本和 vue2 element ui 差不多 但还是有点区别 以至于按emenent ui的写法来写会发现报错 下面我将讲解一下element ui和element plus的自定义
  • 一文彻底讲清Linux tty子系统架构及编程实例

    摘要 本文详细解读了linux系统下的tty子系统的深层次原理和架构 并参考了LDD3中的代码实例讲述了无硬件下实现一个简单的tty设备驱动模块的编写 对了解tty子系统及下部串口驱动模块的学习有较好的参考价值 1 tty设备简介 tty一
  • 抖音广告IOS/Android接入笔记:

    一 抖音广告接入 Android接入 注意 内容输出对接中已包含广告对接 建议使用广告4 6 0 7版本 如使用其他广告版本建议做好自测 2600及以上版本 需要使用如下Maven命令 火山引擎maven仓库地址 maven url htt
  • 红帽系统服务器格式化,Redhat Linux默认的文件系统是什么格式?

    满意答案 现在Redhat Linux默认的文件系统格式是ext4 可以通过如下多种方法查询文件系统类型 1 mount mount dev sda1 on type ext4 rw errors remount ro user xattr
  • 第五周总结

    已知字符串 this is a test of java 按要求执行以下操作 统计该字符串中字母s出现的次数 统计该字符串中子串 is 出现的次数 统计该字符串中单词 is 出现的次数 实现该字符串的倒序输出 public class da
  • MySQL之常见的CRUD面试题【下】

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于MySQL数据库的相关操作吧 目录 Welcome Huihui s Code World 导读 一 MySQL常见的内置函数 1 字符串函数 2 数值函数
  • 测绘地理信息标准规范汇总下载

    经常 我们要下载一些相关的规范来指导作业 每次都在网上找 这里一次性全部整理好 欢迎大家来下载 打包下载 链接 百度网盘地址 分页下载 一 国家测绘局制定的测绘地理信息国家标准 专题地图信息分类与代码 GBT 18317 2001 被GBT
  • 4-C语言-冒泡排序以及数组名的使用

    问题 给数组进行从小到大的升序排序 思想 一般给冒泡排序 进行封装 写成一个函数 这就需要让数组传进去 而传数组 实际传的数组的首元素的地址 因此如果在冒泡内部 进行数组数据个数的计算 用sizeof a sizeof a 0 实际上为1