C语言——数组基本知识(一)

目录

一.一维数组的初始化

二.数组的排序

①冒泡排序:

代码:

没有第二个for循环运行结果如下:

正确的运行结果如下:

②选择排序

代码如下:

运行结果如图:

往期回顾:


一.一维数组的初始化

在定义数组的同时,给各数组元素赋值

int a10={0,1,2,3,4,5,6,7,8,9};

int a10={0,1,2,3,4};相当于
int a10={0,1,2,3,4,0,0,0,0,0};
int a10={0,0,0,0,0,0,0,0,0,0};相当于

int a10={0};

int a5={1,2,3,4,5};可写为

int a ={1,2,3,4,5};

如果是存放字符串,比如char codes\[\] = "sample",那么在字符串末尾会有一个\0,因此该数组长度是7.

如果调用函数直接写一个数组的数组名,那么数组名对应该数组首变量的地址。

二.数组的排序

首先数组的排序分为冒泡排序,选择排序和插入排序

①冒泡排序:

数组排序(冒泡排序)

升序排序算法设计思路

1、每一趟过程通过两两比较和交换将最大的元素冒泡到最后(下标为0的元素最靠前);

2、需要(N-1)趟过程完成数组排序(N是元素个数)。

要写冒泡排序其实有很多种方法,下面举两个例子。

代码:

cpp 复制代码
int main()
{
	int t;
	int arr[8] = { 3,2,7,5,8,6,1,9 };
	int i = 0;
	again:
	for(i=0;i<=6;i++)
		if (arr[i] > arr[i + 1])
		{
			t = arr[i];
			arr[i] = arr[i + 1];
			arr[i + 1] = t;
		}
	for (i = 0; i <= 6; i++)
		if (arr[i] > arr[i + 1])
			goto again;
	for (i = 0; i <= 7; i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

首先第一个for 循环对数组中每两个元素进行比较交换,但是存在一个问题:这只能实现每相邻两个数大小比较交换,而不能实现不相邻的比较交换,因此我们再用一个for循环验证是否全部升序排列,如果不符合,那么再次回到第一个for循环,回到结束为止。

没有第二个for循环运行结果如下:

正确的运行结果如下:

②选择排序

数组排序(选择排序)

降序排序算法设计思路

从a0~asize-1这段元素中找最大元素amax,a0和amax交换;接着,从a1~asize-1这段元素中找最大元素amax,a1和amax交换;依次类推,直到第N-1个元素为止。

代码如下:

cpp 复制代码
int main()
{
	int max = 0;
	int m=0;
	int arr[8] = { 3,5,1,6,8,9,3,4 };
	int i=0;
	int I=0;
	int t;
	while (I<=7)
	{
		for (; i <= 7; i++)
		{
			if (arr[i] > arr[max])
			{
				t = arr[max];
				arr[max] = arr[i];
				arr[i] = t;
			}
		}
		max++;
		I++;
		i = I;
	}
	for (i = 0; i <= 7; i++)
		{
			printf("%d", arr[i]);
		}
	return 0;
}

运行结果如图:

关于数组的查找,我们在之前二分法查找中已经介绍过,读者可以寻找之前的博客进行学习。

往期回顾:

C语言------数组逐元素操作练习-CSDN博客

C语言编程练习:验证哥德巴赫猜想 进制转换 rand函数-CSDN博客

C语言------函数基本知识(三)-CSDN博客

C语言------函数基本知识(二)-CSDN博客

C语言 ------函数基本知识(一)-CSDN博客

"山林不向四季起誓,荣枯随缘"------C语言(爱心+祝福语)代码分享_爱心代码朋友圈文案-CSDN博客

C语言------二分法查找讲解_c语言二分法查找一个数-CSDN博客

C语言穷举法算法经典题型(二)_编写程序,输入x,输出y y= x2+3x-4 (x≤5) =x2-5x+7 (x>5) 输入 一个-CSDN博客

C语言穷举法算法经典题型(一)_c语言穷举法经典例题-CSDN博客

相关推荐
启观川12 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸12 小时前
排序算法介绍
python·算法·排序算法
动词ing13 小时前
【题目练习】算法 组合总和||
算法
wuminyu14 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
longlongzihan14 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
专业程序开发源14 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
Logic10114 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
yi01114 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
极光通讯15 小时前
服务器内存来料检验(IQC)实操:批次追溯、外观判定与上机验证
java·服务器·算法
淡海水15 小时前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots