数组及详解冒泡排序

数组及详解冒泡排序

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

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

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

一维数组的创建和初始化

一维数组的创建

在这里插入图片描述

一维数组在创建时,未给出确定的数组大小值,则该数组必须得初始化,数组的大小根据初始的内容来确定,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* arrfor (i = 0; i < sz; i++){printf("%d ", arr[i]); //打印}return 0;
}

在这里插入图片描述

扫雷与多子棋的实现

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

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

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

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

相关文章

chatgpt赋能python:Python中累乘的作用和用法

Python中累乘的作用和用法 在Python编程语言中&#xff0c;累乘指的是连续乘法&#xff0c;或者说是一系列数字的乘积。累乘的概念非常简单&#xff0c;但是实际上它在编程中有着广泛的应用。 累乘在Python中的实现方式 Python中&#xff0c;累乘可以通过多种方式来实现&…

25条关于人生感悟的经典句子

1.活得糊涂的人&#xff0c;容易幸福&#xff1b;活得清醒的人&#xff0c;容易烦恼。这是因为&#xff0c;清醒的人看得太真切&#xff0c;一较真&#xff0c;生活中便烦恼遍地&#xff1b;而糊涂的人&#xff0c;计较得少&#xff0c;虽然活得简单粗糙&#xff0c;却因此觅得…

佛家经典禅语语录句子

【1】&#xff1a;在天地之间觅得一方安详&#xff0c;听风雨&#xff0c;听山语&#xff0c;听禅语。 【2】&#xff1a;心是一方砚&#xff0c;不空亦不满。眼是一片天&#xff0c;不奢亦不贪。字是一盘餐&#xff0c;不腻亦不淡。深邃梅婷花向晚&#xff0c;零落幻影墨里寒。…

知足常乐--每日十问

如果你想走出常规&#xff0c;放松心情&#xff0c;以积极的的心态开始新的一天&#xff0c;那就很有必要以自问的方式开始一天&#xff0c;这些问题会给我们带来力量和好心情. 1、我拥有什么&#xff1f; 通常我们会为自己没有的东西而苦恼&#xff0c;却看不到自己拥有的&…

chatgpt赋能python:Python中的“5“+“5“:了解运算符重载和字符串拼接

Python中的 “5”“5”: 了解运算符重载和字符串拼接 Python中的运算符重载允许我们自定义类型的操作符行为。当我们使用加号运算符将两个对象相加时&#xff0c;Python会动态地确定该使用哪种类型的操作符行为。在使用字符串时&#xff0c;加号可以用于字符串的连接&#xff…

chatgpt赋能python:Python中的提取函数——数据清洗中必不可少的利器

Python中的提取函数——数据清洗中必不可少的利器 数据清洗是数据分析过程中不可或缺的一步&#xff0c;而Python中的提取函数则是数据清洗中必不可少的利器。本文将重点介绍一些Python中常用的提取函数&#xff0c;以帮助数据分析师更好地应对实际问题。 什么是提取函数&…

chatgpt赋能python:Python中的“或”语句:使用方法和示例

Python中的“或”语句&#xff1a;使用方法和示例 在Python编程中&#xff0c;“或"语句表示为"or”&#xff0c;它是逻辑运算符的一种形式。"或"语句可以用于组合两个或多个条件&#xff0c;只要其中一个条件成立&#xff0c;整个语句就会返回True。在本…

css3和h5的新特性

H5的新特性 1. 用于绘画 canvas 元素。 2. 用于媒介回放的 video 和 audio 元素。 3. 本地离线存储 localStorage 长期存储数据&#xff0c;浏览器关闭后数据不丢失&#xff1b; sessionStorage 的数据在浏览器关闭后自动删除。 4. 语意化更好的内容元素&#xf…

六、H5新特性

文章目录 一、H5的兼容二、H5新增特性2.1 语义化标签2.2 增强表单2.3 音频、视频 一、H5的兼容 支持 HTML5的浏览器包括Firefox(火狐浏览器)&#xff0c;IE9及其更高版本&#xff0c;Chrome(谷歌浏览器)&#xff0c;Safari,Opera等&#xff0c;国内的遨游浏览器&#xff0c;以…

h5简介和新特性

h5简介和新特性 语义化标签表单新增的type属性表单元素的其他属性新增的表单元素&#xff0c;datalisth5新增表单事件meter标签fieldset标签和legend标签自定义属性规范全屏接口上传图片实时预览进度条参考手册 学习资源推荐 https://blog.csdn.net/qq_42813491/article/detai…

最详细H5新特性

1. 语义化标签 &#xff08;1&#xff09;比如&#xff1a;header、conent、footer、aside、nav、section、article等语义化标签。 &#xff08;2&#xff09;语义化标签的好处&#xff1a;结构清楚&#xff0c;易于阅读&#xff0c;可维护性更高&#xff0c;有利于SEO的优化…

H5新增了哪些新特性

目录 前言 1.语义化标签 2.form表单增强 3.视频和音频 4.Canvas绘图 5.SVG绘图 6.地理位置定位&#xff08;Geolocation API &#xff09; 7.拖放API 8.Web Worker 9.Web Storage 10.Web Socket 总结 前言 本期为大家总结面试时常被问到的一个问题&#xff0c;那就…

HTML 5 的十大新特性

HTML5 十大新特性总结 一、语义标签 二、增强型表单 三、视频和音频 四、Canvas绘图 五、SVG绘图 六、拖拉API 七、WebWorker 八、WebStorage 九、WebSocket 十、地理定位 一、语义化标签 1.1 什么是语义化标签? 语义化标签既是使标签有自己的含义 1.2 语义化标签…

【靶场实战】Vulnhub - JANGOW: 1.0.1 靶标实战

靶场地址&#xff1a;https://www.vulnhub.com/entry/jangow-101,754/ 靶场IP&#xff1a;192.168.160.215 信息收集 使用Nmap对目标进行扫描 Nmap -sV -O -p- 192.168.160.215 经过漫长的等待扫描完成&#xff0c;该靶标开启了21、80两个端口&#xff0c;21端口运行服务为f…

什么样的打码网站算正规的打码网站

自动打码平台是通过计算机语言对图片图片验证码的一种识别&#xff0c;将图片验证码通过系统自动的识别出来&#xff0c;并且通过一定的途径自动输入需要填写图片验证码的框。这样的平台就成为打码平台平台。实际上就是对于图片验证码的识别破解。答题吧打码平台平台就是利用的…

自动打码神器的准确率你担心么?

现在干什么都需要验证码&#xff0c;比如注册账号、登录账号等一些日常上网操作经常要输入验证码&#xff0c;而很多网站的验证码越来越难看懂。这样对于需要批量操作的人来说真的是折磨啊&#xff0c;但是有了这款验证码自动识别软件之后&#xff0c;大家就可以轻松识别复杂的…

JAVA 实现对图片打码,打马赛克

一. 图片区域类 package com.example.demo.xxx;/*** 图片区域类* author jlm**/ public class ImageArea {int x; //指定区域左上角横坐标int y; //指定区域左上角纵坐标int width; //指定区域宽度int height; //指定区域高度public ImageArea(int x, int y, int width, int h…

基于OpenCV_C++人脸检测打码技术

人脸检测并打码的关键&#xff0c;首先需要定位人脸区域&#xff0c;再修改人脸区域像素灰度值。 一 定义马赛克函数 定义生成马赛克函数 Generate_Mosaic&#xff0c;对图形 Mat& src 做操作&#xff0c;将需要操作的块&#xff08;faces&#xff09;存入数组 vector<…

Python可以解码吗,解码打码是如何实现的

前言 咳咳&#xff0c;进来的铁汁都是抱着学习的心态进来看的吧&#xff0c;咱今天不讲解解码&#xff0c;咱来说说python如何来实现打码功能~ 这一个个进来的 都是标题党吧哈哈哈 有兴趣的可以继续看看哦 最近重温了一档综艺节目 至于叫什么 这里就不细说了 老是看着看着就…

打码软件是真的吗

日前在各大社交网站上热传的“打码软件赚钱”帖子引发不少打码兼职人员的关注。“打码赚钱”到底出自何处&#xff1f;是否有充足的实例&#xff1f; 打码软件是什么&#xff1f; 打码软件是一些验证码识别平台推出来的一种通过任务的发放&#xff0c;让兼职者能够进行…