数组及详解冒泡排序

这篇具有很好参考价值的文章主要介绍了数组及详解冒泡排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

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

一维数组的创建和初始化

一维数组的创建

数组及详解冒泡排序

一维数组在创建时,未给出确定的数组大小值,则该数组必须得初始化,数组的大小根据初始的内容来确定,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;
}

数组及详解冒泡排序

扫雷与多子棋的实现

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

铁铁们,数组及详解冒泡排序讲解就到此结束啦,请动动你们的手给作者点个👍鼓励吧,你们的鼓励就是我的动力✨文章来源地址https://www.toymoban.com/news/detail-465274.html

到了这里,关于数组及详解冒泡排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java练习题-用冒泡排序法实现数组排序

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生

    2024年02月08日
    浏览(43)
  • Java---第四章(数组基础,冒泡排序,二分查找,多维数组)

    概念: 数组是编程语言中的一种常见的数据结构,能够存储一组相同类型的数据 作用: 存储一组相同类型的数据,方便进行数理统计(求最大值,最小值,平均值以及总和),也可以进行信息的展示 定义: 第一种: 只能在定义数组同时赋值时使用 第二种: 可以在定义数组

    2024年02月09日
    浏览(39)
  • C语言实现冒泡排序排列数组中的元素!

     按照 图中的方法 来编写程序: 1、 void* base,    //base中存放的是待排序数据中第一个对象的地址 2、 size_t num,    // 待排序数据元素的个数 3、 size_t width,    // 待排序数据中一个元素的大小,单位是字节 4、i nt(__cdecl* compare)(const void* elem1, const void* elem2) // 函数指针  用来比

    2024年02月15日
    浏览(27)
  • 【C++实战小项目】通讯录(四) 冒泡排序通过string首字母排序多个数组

    🧛‍♂️iecne个人主页: : iecne的学习日志 💡每天 关注 iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 首先制作一款通讯录我们可以将它分为以下部分 增加联系人 删除联系人 查找联系人 修改联系人 打印通讯录 排序通讯录 这一期我们

    2024年01月19日
    浏览(28)
  • 排序算法之详解冒泡排序

    冒泡排序顾名思义,就是像冒泡一样,泡泡在水里慢慢升上来,由小变大。 虽然冒泡排序和冒泡并不完全一样,但却可以帮助我们理解冒泡排序。 一组无序的数组,要求我们从小到大排列 我们可以先将最大的元素放在数组末尾 再将第二大的数放在数组的倒数第二个位置 再

    2023年04月25日
    浏览(82)
  • 排序算法——冒泡排序详解及优化

    对于一个排序算法,假设两个相同的元素Ai和Aj· 在排序前这两个元素满足条件ij,即Ai在Aj之前· 在排序后Ai仍在Aj之前,则称为排序算法为稳定排序· 否则称这个算法为不稳定排序 稳定性的说明 排序的稳定性并不影响排序算法的效率,稳定性只对类/结构体类型数据有影响 这

    2024年02月06日
    浏览(28)
  • 【六大排序详解】终篇 :冒泡排序 与 快速排序

    冒泡排序如同泡泡上升一样,逐个逐个向上冒,一个接一个的冒上去。两两比较,较大者(较小者)向后挪动。全部遍历一遍即可完成排序。 首先从头开始,两两相互比较。每次排好一个最大(最小) 然后在从头开始,两两比较 至已排序部分之前。 依次往复,全部遍历一遍

    2024年02月03日
    浏览(28)
  • 两个基本排序算法【选择排序,冒泡排序】【详解】

    一、前言 二、选择排序 2.1 选择排序(基础版)【必会】 2.2 选择排序(优化版) 三、冒泡排序 3.1 冒泡排序(基础版)【必会】 3.2 冒泡排序(外循环优化版) 3.3 冒泡排序(内循环优化版) 四、总结   排序法主要分为两种: 比较排序 和 非比较排序 。常见的比较排序有

    2024年02月03日
    浏览(26)
  • JavaScript函数变量的生命周期,自执行函数、闭包、反转数组案例及冒泡排序案例

    一、变量的生命周期 JavaScript 变量的生命期从它们被声明的时间开始。 局部变量会在函数运行以后被删除。 全局变量会在页面关闭后被删除。 二、自执行函数 执行函数通常都是定义之后立即执行,以后都不再会调用,所以声明时可以省略函数名,因此自执行函数又叫匿名函

    2024年02月06日
    浏览(38)
  • 选择排序 | 冒泡排序 | C语言(详解)

    1,基本知识 对排序的双层 for 循环的理解:外层 控制趟数,里层 不断地对数组进行遍历。 2,逐层深入 经典的选择排序GIF动图,如下:   关键部分: Ⅰ ,从数组中的第一个元素开始,不断地选定一个元素(引用其下标 markindex,如下代码)与其之后的元素进行比较,如果发

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包