数组及详解冒泡排序

news2024/11/19 8:46:36

数组及详解冒泡排序

  • 一维数组的创建和初始化
    • 一维数组的创建
    • 一维数组的初始化
    • 一维数组的应用
    • 一维数组在内存中的存储
  • 二维数组的创建和初始化
    • 二维数组的创建
    • 二维数组的初始化
    • 二维数组的应用
    • 二维数组在内存中的存储
  • 数组越界问题
  • 数组作为函数参数
    • 数组名的含义及特殊两个例子
  • 冒泡排序详解
  • 扫雷与多子棋的实现

铁汁们,今天给大家分享一篇数组及详解冒泡排序,来吧,开造⛳️

数组的定义:是一组相同类型元素的集合。

一维数组的创建和初始化

一维数组的创建

在这里插入图片描述

一维数组在创建时,未给出确定的数组大小值,则该数组必须得初始化,数组的大小根据初始的内容来确定,eg:int arr[]={1,2,3,4,5,6}。若不初始化,则编译器会报错。

一维数组的初始化

由于博主在前面给铁汁分享函数栈帧的创建与销毁可知:

局部变量或者定义在函数体内的数组 是在栈上开辟空间,如果不初始化,根据函数栈帧的知识可知,则其值默认为随机值。

数组初始化的定义:数组在创建的同时给数组内容赋予初始值。eg:char arr[6]=“abcde”;
在这里插入图片描述

一维数组的应用

访问数组中的元素,要使用[ ]下标引用操作符,操作数为数组名、数组下标值。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);  //求任意类型元素总个数,sizeof为操作符
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]); //访问数组元素,下标引用操作符
	}
	return 0;
}

在这里插入图片描述

数组是通过下标来进行访问的,下标值从0开始

求数组元素总个数: int sz = sizeof(arr) / sizeof(arr[0]),sizeof为操作符,操作数是类型或者变量,计算的是类型或者变量占内存的大小,单位为字节。

一维数组在内存中的存储

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]); 
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("arr[%d]=%p\n",i, &arr[i]); 
	}
	return 0;
}

在这里插入图片描述
由图可知随之数组下标的增长,数组下标也是成一定规律进行增长,相邻两个元素地址相差4个字节。
在这里插入图片描述

二维数组的创建和初始化

二维数组的创建

在这里插入图片描述

二维数组在创建时,行可以省略,但列不能省略,若要省略行,则二维数组必须得要初始化,行的值根据初始化的内容来确定。

二维数组的初始化

二维数组初始化的定义:数组在创建的同时给数组内容赋予初始值。eg:int arr[4][5]={{1,2},{3,4}};

二维数组的应用

二维数组与一维数组相同,也是通过下标来进行访问。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int arr[4][3] = {{0,1,2},{3,4,5},{6,7,8},{9,10,11}};
	int i = 0;
	for (i = 0; i <4; i++)
	{
		int j = 0;
		for (j = 0; j < 3; j++)
		{
			printf("%d ",arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述

二维数组在内存中的存储

%p:打印地址,参数变量要加取地址操作符&

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int arr[4][3] = {{0,1,2},{3,4,5},{6,7,8},{9,10,11}};
	int i = 0;
	for (i = 0; i <4; i++)
	{
		int j = 0;
		for (j = 0; j < 3; j++)
		{
			printf("%p\n",&arr[i][j]);
		}
	}
	return 0;
}

在这里插入图片描述
由图可知,随着下标的增长,地址成一定的规律增长(相邻两元素地址相差4个字节),即:二维数组在内存中是连续存放的
在这里插入图片描述

数组越界问题

数组下标是有范围限制的。

c语言标准规定,数组下标从0开始,若数组中有n个元素,则最后一个元素对应的下标值不超过n-1,即:数组下标值的范围为0到n-1,若小于0或超过n-1,就是数组的越界访问啦~,起始就是超出了数组的合法空间(本身向内存申请空间

c本身是不做下标越界的检查,编译器也不一定会报错,但编译器不报错,并不说明代码就是正确的,作为一名程序员,我们应该要具备在写代码时,自己做好数组越界检查

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i <= sz; i++) //此处不能等于sz,造成了数组越界
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

一维数组、二维数组行和列均有越界的可能性。

数组作为函数参数

数组名的含义及特殊两个例子

通常情况下,数组名是首元素的地址(两个例外)
1 sizeof(数组名):计算的是整个数组的大小,单位是字节,sizeof内部单独放一个数组名,数组名表示整个数组
2.&数组名:取出的整个数组的地址,&数组名,数组名表示整个数组。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int arr[5] = { 0,1,2,3,4 };
	printf("%p\n", arr);
	printf("%p\n", arr+1);
	printf("\n");
	printf("%p\n", &arr[0]);
	printf("%p\n", &arr[0]+1);
	printf("\n");
	printf("%p\n",&arr);
	printf("%p\n", &arr + 1);
    return 0;
}

在这里插入图片描述

冒泡排序详解

适用条件:整形数组进行升序排序(也适用于数组中含有相同元素在不同位置处的升序排序)。

实现思想:相邻两元素两两进行比较、采用两层for循环(第一层for循环控制总趟数、第二层for循环控制每一趟两相邻元素之间要比较的对数),每一趟都可以让某一个元素到达其最终所在的位置处

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Maopao(int arr[10], int sz)
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)//控制要排序的总趟数
	{
		int flag = 1;//假设进行每一趟排序之前该数组已经有序,无需依次把每个元素进行比较,效率高
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++) //控制每一趟两相邻元素之间要比较的对数
		{
			if (arr[j] > arr[j + 1])
			{
				flag = 0;  //说明该数组此时并未达到是有序的
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
		if (flag == 1)
		{
			break;  //该数组为有序数组,直接跳出循环,无需进行比较,效率提高
		}
	}
}
int main()
{
	int arr[10] = { 10,9,4,7,6,5,2,3,1 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]); //计算数组中元素的总大小,切不可放在冒泡函数实现中,不然sz值为1(4/4=1)
	Maopao(arr, sz); //数组作为参数传参时,传的是数组名,首元素的地址,为4个字节,arr==int* arr
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]); //打印
	}
	return 0;
}

在这里插入图片描述

扫雷与多子棋的实现

铁子们~此处代码的实现博主已经在其他篇博客详细讲解了,请铁铁们点击此链接观看呦扫雷实现详解、三子棋及多子棋的实现。

铁铁们,数组及详解冒泡排序讲解就到此结束啦,请动动你们的手给作者点个👍鼓励吧,你们的鼓励就是我的动力✨

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

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

相关文章

PACS影像解决方案

现代医学影像技术的迅猛发展&#xff0c;使得PACS系统已逐渐成为各级医院实现信息化建设的重要组成部分。医学影像技术的进步也提升了医学影像的清晰度&#xff0c;推动二维PACS向三维升级转变。这一切都使得医学影像数据量激增&#xff0c;加之医疗行业法规的数据保存要求&…

对DataFrame指定字段进行整数编码df[‘字段名称‘].factorize()[0]

【小白从小学Python、C、Java】 【等级考试500强双证书考研】 【Python-数据分析】 对DataFrame指定字段进行整数编码 df[字段名称].factorize()[0] 选择题 关于以下代码说法错误的是&#xff1a; import pandas as pd myData pd.DataFrame({编码前: [A, B, C, A, B]}) …

Missing-Semester Lec1 Solution

操作系统&#xff1a; m a c O S M o n t e r e y v e r s i o n 12.6 macOS \ Monterey version \ 12.6 macOS Montereyversion 12.6 1、查看shell是否符合要求 echo $SHELL /bin/zsh2、在/tmp下新建一个名为missing的文件夹 mkdir missing3、用man查看程序touch的使用手册…

我要官宣了!

小伙伴们大家好&#xff0c;我是阿秀。 我做写文章已经两年多时间了&#xff0c;最开始是分享自己的读研时生活的的小事&#xff0c;后来慢慢记录自己的学习和秋招找工作。 在研三那年校招结束后&#xff0c;我开始系统的分享自己的学习过程&#xff0c;分享自己学习过程中所记…

国产数据库|GBase 8s V8.8 学习笔记之架构介绍

作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路&#xff08;ID: JiekeXu_IT&#xff09; 如需转载请联系授权 | (个人微信 ID&#xff1a;JiekeXu_DBA) 大家好&#xff0c;我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看国产数据库|GBase 8s V8.8 学习笔记之架构介绍&…

《计算机组成原理》唐朔飞 第10章 控制单元的设计 - 学习笔记

写在前面的话&#xff1a;此系列文章为笔者学习计算机组成原理时的个人笔记&#xff0c;分享出来与大家学习交流。使用教材为唐朔飞第3版&#xff0c;笔记目录大体与教材相同。 网课 计算机组成原理&#xff08;哈工大刘宏伟&#xff09;135讲&#xff08;全&#xff09;高清_…

Office project 2021安装

哈喽&#xff0c;大家好。今天一起学习的是project 2021的安装&#xff0c;Microsoft Office project项目管理工具软件&#xff0c;凝集了许多成熟的项目管理现代理论和方法&#xff0c;可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

Spring事务与事务传播

文章目录 一、什么是事务?二、Spring事务实现编程式事务声明式事务 三、Transactional的使用参数作用Spring事务的隔离级别事务失效的场景Transactional工作原理 四、Spring事务传播机制Spring有哪些事务传播机制&#xff1f; 一、什么是事务? 事务&#xff1a;事务是一组操…

Python十类常见异常类型(附捕获以及异常处理方式)

目录 前言十类异常1.TypeError2.ValueError3.NameError4.IndexError5.KeyError6.ZeroDivisionError7.IOError8.ImportError9.AttributeError10.KeyboardInterrupt 异常捕获以及处理总结 前言 大家好&#xff0c;我是辣条哥&#xff01;今天给大家讲讲我们刚开始写代码是都会出现…

系统学习】Java基础3之反射

Java反射 反射机制概述 Reflection&#xff08;反射&#xff09;是被视为动态语言的关键&#xff0c;反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息&#xff0c;并能直接操作任意对象的内 部属性及方法 加载完类之后&#xff0c;在堆内存的方法区中就产…

美债提高上限的后果

* * * 原创&#xff1a;刘教链 * * * 号外&#xff1a;今天在小号“刘教链Pro”发表了一篇《再论以太坊的自限性》&#xff0c;谈了一下对比特币和以太坊自限性问题的再研讨&#xff0c;欢迎关注“刘教链Pro”并阅读。 * * * 隔夜比特币小幅回落至28k下方。昨日在28k上方遭遇了…

在Centos Stream 9上Docker的实操教程(四) - Docker腾讯云远程仓库和本地私有仓库

在Centos Stream 9上Docker的实操教程 - Docker腾讯云远程仓库和本地私有仓库 本地镜像发布到腾讯云注册开通腾讯云初始化个人版服务创建仓库推送拉取镜像 私有仓库结语 本地镜像发布到腾讯云 由于官方的docker hub访问由于网络原因&#xff0c;可能会比较慢&#xff0c;博主推…

0301依赖使用以及配置优先级-基础-springboot2.7.x系列

文章目录 1 依赖方式1.1 spring-boot-starter-parent依赖1.2 spring-boot-dependencies依赖1.3 对比 2 使用方式2.1 SpringbootApplication2.2 高度定制 3 springboot各种配置优先级顺序4 sprinboot配置文件解析顺序结语 1 依赖方式 这里项目以开源的renren和pig为例&#xff…

Meta发布Megabyte AI模型抗衡Transformer

&#x1f680; Meta发布Megabyte AI模型抗衡Transformer&#xff1a;解决后者已知问题、速度提升4成 摘要&#xff1a;Meta团队开发的Megabyte AI模型可以抗衡当前在自然语言处理领域非常流行的Transformer模型&#xff0c; 解决了Transformer模型所面临的训练速度较慢、难以…

【Java 并发编程】深入理解 AQS - AbstractQueuedSynchronizer

深入理解 AQS - AbstractQueuedSynchronizer 1. AQS1.1 什么是 AQS1.2 AQS 具备的特性 2. AQS 原理解析2.1 AQS 原理概述2.1.1 什么是 CLH 锁2.1.2 AQS 中的队列 2.2 AQS 共享资源的方式&#xff1a;独占式和共享式2.2.1 Exclusive&#xff08;独占式&#xff09;2.2.2 Share&a…

用 GPT-4 来面试,简直开挂啊!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 众所周知&#xff0c;ChatGPT 凭其超强的文本生成能力&#xff0c;成为了 2023 年最为火爆的 AI 应用之一。 几个月前&#xff0c;GPT-4 发布&#xff0c;又将 ChatGPT 的能力提升到了一个…

redis为何这么快

文章目录 概述基于内存的操作高效的数据存储结构设计高效的数据结构string底层实现SDS字符串长度处理杜绝缓冲区溢出减少内存重新分配的次数空间预分配惰性空间释放 list底层实现压缩列表(zipList)双端链表(linkList) hsah底层实现ziplist字典 set底层实现 zset底层实现ziplist…

“大厂的人一毕业,讲师就多了起来”——但培训行业,早就卷起来了

“大厂的人一毕业&#xff0c;讲师就多了起来”&#xff0c;很多中年产品经理都把去做培训当成一个后备选项&#xff0c;也许&#xff0c;作为十几年前就淌过路的人&#xff0c;可以给你一些信息。 总体来说&#xff0c;今年有个特别的体感&#xff0c;就是产品经理/产品思维/产…

【分布式应用】ELFK集群部署(Filebeat+ELK)Logstash的过滤模块

一、ELFK集群部署&#xff08;FilebeatELK&#xff09; ELFK ES logstashfilebeatkibana 实验环境 服务器类型系统和IP地址需要安装的组件硬件方面node1节点192.168.126.21JDK、elasticsearch-6.7.2、kibana-6.7.22核4Gnode2节点192.168.126.22JDK、elasticsearch-6.7.22核4…

chatgpt赋能python:Python中的快捷键:提高编程效率的利器

Python中的快捷键&#xff1a;提高编程效率的利器 作为一名有10年Python编程经验的工程师&#xff0c;我深刻体会到快捷键的重要性。在日常编程中&#xff0c;快捷键可以大大提高编程效率&#xff0c;让我们更快地完成工作。本文将介绍Python中一些常用的快捷键&#xff0c;并…