C语言(四)—— 一维数组与冒泡、选择排序

文章介绍了数组的基本概念,包括数组的一般形式、数组的引用、初始化方式以及数组的大小计算。还讨论了冒泡排序和选择排序算法,并提到了字符数组和字符串的处理,强调了数组使用时的注意事项,如避免越界和正确初始化。
摘要由CSDN通过智能技术生成

1 数组

定义:具有一片连续存储空间且数据类型相同的变量的集合。
    其中每个变量称为数组的元素

1.1数组的一般形式

<存储类型> 数据类型 <数组名>[元素个数]
存储类型:
    一般默认为自动存储;
数据类型:根据要存储的数据来确定
数组名:
    1、命名:与标识符相同的命名规则;
    2、数组名实质上是数组空间的首地址;
    3、数组名是一个地址常量;
 例如 int arr[10] = {};
 arr -->首地址
 arr + 1 -->表示第二个元素的地址
  arr++ //error
    //数组名是一个地址常量,数组名永远是首地址不能被赋值      元素个数:表示数组最多能存多少个元素,为常量表达式。

1.2 数组的引用

数组只能逐个引用
数组名[下标]
下标:从0开始
   int arr[5] --> arr[0] arr[1] arr[2] arr[3] arr[4]
    数组的赋值:
    arr[0] = 10;
	arr[1] = 20;
	arr[2] = 30;
	arr[3] = 40;
	arr[4] = 200;

1.3 数组的初始化

1.完全初始化:
int arr[5] = {1, 2, 3, 4, 5};
2.部分初始化
int arr[5] = {1, 2, 3};
//依次赋值,没有被赋值到的元素自动补0;

int arr[5] = {0}; //全0
3.不给维数(下标)的初始化
int arr[] = {1, 2, 3, 4, 5};
//表示arr是一个可以存储5个整型元素的数组
//数组的大小根据赋值的元素个数来确定的
//sizeof(arr) == 20

1.4 数组的大小

数组的大小: sizeof(数组名);
单个元素所占字节数: sizeof(arr[0]) == sizeof(数据类型)
数组的大小 = 单个元素所占字节数 * 元素个数;
元素个数 = 数组所占字节数 / 单个元素所占字节数

7.3 冒泡排序

实质: 把最大值往后面放
排序的趟数: n-1趟
每趟比较的次数: n-1-i次
(在比较的时候前一个数比后一个大,就和后一个交换)

7.4 选择排序

实质:
第一趟:假设第一个数为最小值,并记录下标;
让第一个数和后面的所有数进行比较,遇到小的就记录下标,
直到遍历完找到最小值的下标;判断最小值的下标是否为第一个数的下
标;
如果不是那么第一个数就不是最小值,就让第一个数和最小值交换;
这样第一趟比较的结果就是将最小值放在了第一个位置;
第二趟 就假设第二个数为最小值,再和后面所有数比较,找到最小值下
标,
如果找到就继续交换。没找到就进行第三趟直到n-1趟结束;
eg:
int arr[5] = {0};
arr++; // error!!!arr首地址、地址常量
eg2:
int size = 5;
int arr[size] = {0};
//元素个数应该为常量表达式
#define SIZE 5
int arr[SIZE]; //true
eg:
int arr[5] = {0};
arr[5] = 100; //越界了 error!!!
//C语言不会对数组作越界检查,使用数组的时候不要越界

2 字符一维数组及字符串

2.1 字符串

字符串由多个字符组成,结尾自带'\0';

2.2&nbsp字符一维数组

一般形式:
存储类型 char 数组名[常量表达式];
eg:
char buf[32]:
表示一个可以存储32个字符的数组;

2.3 字符数组的初始化

一、逐个字符赋值:
1)完全初始化:
char buf[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
//一般都会将字符数组当成字符串来处理,
//当成字符串处理的时候就一定要保证有'\0'结尾;
补充:
%s 输出遇 '\0'结束
%s 输入 遇到空格或者回车结束
2) 部分初始化
char buf[6] = {'h', 'o', 'w'};
会逐个赋值,没有被赋值到的元素补上'\0';
3) 不给下标的初始化
char buf[] = {'h', 'e', 'l', 'l', 'o', '\0'};
//数组占6字节
二、字符串直接赋值
char buf[6] = {"hello"};
char buf[6] = "hello";
char buf[] = "hello";
// ---> 由 'h' 'e' 'l' 'l' 'o' '\0' 共6个元素组成
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值