34.一维数组定义方式
数组中的每个数据都是相同的数据类型;数组是由连续的内存位置组成的。
一维数组的三种定义方式:
1.数据类型 数组名[数组长度]
eg:int num[50];
//给数组中的元素赋值(数组元素下标从0开始索引)
num[0] =1;
num[1] =2;
num[2] =3;
//输出数组中的元素
std::cout<<num[1]<<std::endl;
2.数据类型 数组名[数组长度] = {值1,值2,值3...}
eg:int num2[3] = {4,5,6};
3.数据类型 数组名[] = {值1,值2,值3...}
eg:int num3[] = {8,9,10};
使用第三种方法,定义数组时数组必须有初始长度
如果在初始化数据时,没有将数组中的元素全部初始化完,其余元素就会自动用0来填补
35.一维数组名
一维数组名的用途:
1.统计整个数组在内存中的长度;
代码:
int main() {
int arr[5] = {1,2,3,4,5};
std::cout<<"整个数组占用内存空间为:"<<sizeof(arr)<<std::endl;
std::cout<<"数组中每个元素占用内存空间为:"<<sizeof(arr[0])<<std::endl;
std::cout<<"数组中元素个数为:"<<sizeof(arr)/sizeof(arr[0])<<std::endl;
}
运行结果:
整个数组占用内存空间为:20
数组中每个元素占用内存空间为:4
数组中元素个数为:5
2.可以获取数组在内存中的首地址;
代码:
std::cout<<"数组首地址为"<<arr<<std::endl;
std::cout<<"数组中第一个元素的地址为"<<arr<<std::endl;
std::cout<<"数组中第二个元素的地址为"<<&arr[1]<<std::endl;
运行结果:
数组首地址为0x7bfe00
数组中第一个元素的地址为0x7bfe00
数组中第二个元素的地址为0x7bfe04
数组名是一个常量(已经指向数组首地址),不可以赋值
demo1:五只小猪称体重。在一个数组中记录了五只小猪的体重,找出并打印最重的小猪体重
代码:
int main() {
int max =0;
int arr[5] = {200,180,360,145,414};
for (int i =0; i <5; i++) {
if (arr[i] > max)
max = arr[i];
}
std::cout<<"最重的小猪重达"<<max<<"斤"<<std::endl;
}
运行结果:
最重的小猪重达414斤
demo2:数组元素逆置。声明一个5个元素的数组,并将元素逆置。
代码:
int main() {
int arr[5] = {1,2,3,4,5};//逆置结果:5 4 3 2 1
int j =1;
int temp =0;
for (int i =0; i <2; i++) {
temp = arr[i];
arr[i] = arr[sizeof(arr)/sizeof(arr[0]) - j];
arr[sizeof(arr)/sizeof(arr[0]) - j] = temp;
j++;
}
for (int j =0; j <5; j++) {
std::cout<<arr[j]<<std::endl;
}
}
运行结果:
5
4
3
2
1
黑马程序员写的
代码:
int main() {
//1.创建数组
int arr[5] = {1,2,3,4,5};//逆置结果:5 4 3 2 1
std::cout<<"数组逆置前:"<<std::endl;
for (int i =0; i <5; i++) {
std::cout<<arr[i]<<std::endl;
}
//2.实现逆置
//2.1 记录起始下标位置
int start =0;
//2.2 记录结束下标位置
int end =sizeof(arr)/sizeof(arr[0]) -1;
//2.5 循环执行2.1的操作 //2.3 起始下标与结束下标的元素互换
while (start < end){
//2.3 起始下标与结束下标的元素互换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
//2.4 起始位置++ 结束位置--
start++;
end--;
}
//3.打印逆置后的数组
std::cout<<"数组逆置后:"<<std::endl;
for (int i =0; i <5; i++) {
std::cout<<arr[i]<<std::endl;
}
}
运行结果:
数组逆置前:
1
2
3
4
5
数组逆置后:
5
4
3
2
1
36.一维数组——冒泡排序
作用:最常用的排序算法,对数组内元素进行排序
1.比较相邻两个元素。如果第一个比第二个大。就交换他们两个
2.对每一对相邻元素做相同的工作,执行完毕后,找到第一个最大值
3.重复以上的步骤,每次比较次数 - 1,直到不需要比较
排序总轮数 = 元素个数 - 1;
每轮对比次数 = 元素个数 - 排序轮数 - 1;
代码:
int main() {
//利用冒泡排序实现升序序列
int arr[9] = {4,2,8,0,5,7,1,3,9};
std::cout<<"排序前:"<<std::endl;
for (int i =0; i <9; i++) {
std::cout<< arr[i]<< " ";
}
std::cout<< std::endl;
//开始冒泡排序
//总共排序轮数 = 元素个数- 1
for (int i =0; i <9 -1; i++) {
//内层循环对比 次数 = 元素个数 - 排序轮数- 1
for (int j =0; j <9 - i -1; j++) {
//如果第一个数字比第二个数字大,交换这两个数字
if (arr[j] > arr[j +1]){
int temp =0;
temp = arr[j];
arr[j] = arr[j +1];
arr[j +1] = temp;
}
}
}
std::cout<<"排序后:"<<std::endl;
for (int i =0; i <9; i++) {
std::cout<< arr[i]<< " ";
}
}
运行结果:
排序前:
4 2 8 0 5 7 1 3 9
排序后:
0 1 2 3 4 5 7 8 9