C++基础:数组(一维数组、二维数组、冒泡排序)

1. 概述

  • 所谓的数组,就是一个里面存放了相通类型的元素的集合

数组时由连续的内存位置组成的

2. 一维数组

2.1 一维数组的定义

  • 有三种方式

    • 1.数据类型 数组名[数组长度];如:
          int a[10];
      	a[0] = 1;
      	a[1] = 2;
      	...
      
    • 2.数据类型 数组名[数组长度]={值1,值2,...};如://未定义的值默认为0
          int a[10] = {1,2,3,};
      也可以循环输入:
          for (i = 0; i < 10; i++)
          {
              cin << a[i];
          }
      
    • 3.数据类型 数组名[] = {值1,值2,...};如://该数组长度取决于给予的值个数
          int a[] = {1,2,3};//该数组长度为3
      
  • 数组中下表时从0开始的,如:

    • int a[3] = {1,2,3};
      /*其中:
      a[0] = 1;
      a[1] = 2;
      a[2] = 3;
      */
      

2.2 一维数组的输出

	int a[10] = {1,2,3,4,5,6,7,8,9,10};
//可以逐个单独输出:
    cout << a[0] << endl;
	cout << a[1] << endl;
	......
//也可以循环输出
    for (i = 0; i < 10; i++)
    {
        cout << a[i] << endl;
    }

2.3 一维数组的数组名

  • 数组名的命名规范与变量名命名规范一致,不要和变量重名

  • 数组名的用途:

    int main() {
        
        //1.获取整个数组占用内存空间大小
        int arr[10] = {1,2,3,4,5,6,7,8,9,10};
        
        cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;//结果为40
    	cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;//结果为4
    	cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;//结果为10
        
        //2、可以通过数组名获取到数组首地址
    	cout << "数组首地址为: " << arr << endl;//结果为0x70fde0
    	cout << "数组中第一个元素地址为: " << &arr[0] << endl;//结果也为0x70fde0,说明一位数组的首地址和第一个元素的地址相同
    	cout << "数组中第二个元素地址为: " << &arr[1] << endl;//结果为0x70fde4,说明两个元素之间确实相差空间4
    
    
    	system("pause");
    
    	return 0;
    }
    

    数组名是常量,不可以赋值

3. 冒泡排序

  • 最常用的排序算法,对数组内元素进行排序

  • 每次比较相邻,若第一个比第二个大,就交换,到最后一个后,又从第一个开始,如:

    • 比较排序a[5] = {5,4,3,2,1};

    • 轮数a[0]a[1]a[2]a[3]a[4]比较次数
      1543210
      1453211
      1435212
      1432513
      1432154
      2342151
      2324152
      2321453
      3231451
      3213452
      4123451

      由规律我们可以发现总共需要4轮(即数组长度减1),每轮比较的次数为数组长度减该轮数

    • 代码如下:

      int main() {
      
      	int arr[5] = {5,4,3,2,1};
      
      	for (int i = 0; i < 5 - 1; i++)//因为数组是从0开始的
      	{
      		for (int j = 0; j < 5 - 1 - i; j++)
      		{
      			if (arr[j] > arr[j + 1])
      			{
      				int temp = arr[j];
      				arr[j] = arr[j + 1];
      				arr[j + 1] = temp;
      			}
      		}
      	}
      
      	for (int i = 0; i < 5; i++)
      	{
      		cout << arr[i] << endl;
      	}
          
      	system("pause");
      
      	return 0;
      }
      

4.二维数组

  • 即在一位的基础上多了一个维度

4.1 二维数组的定义

  • 有四种方式:

    • 1.数组类型 数组名[行数][列数];如:
          int a[2][3];
      	a[0][0] = 1;
      	a[0][1] = 2;
      	...
          也可以循环输入:
          for (int i = 0; i < 2; i++)
      	{
      		for (int j = 0; j < 3; j++)
      		{
      			cin << arr[i][j] << " ";
      		}
      	}
      
    • 2. 数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};如:
          int arr2[2][3] =
      	{
      		{1,2,3},
      		{4,5,6}
      	};
      
    • 3.数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4  };如:
      	int arr3[2][3] = { 1,2,3,4,5,6 }; 
      
    • 4.数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4  };如:
      	int arr4[][3] = { 1,2,3,4,5,6 };//实际这里的空格为2,如果初始化了数据,可以省略行数
      

    四种相比较,第二种更直观,提高代码的可读性

5.2 二维数组的输出

同一维数组同理:
	int a[10] = {1,2,3,4,5,6};
//可以逐个单独输出:
    cout << a[0][0] << endl;
	cout << a[0][1] << endl;
	......
//也可以循环输出
    for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

5.3 二维数组的数组名

  • 用途:

    int main() {
    
    	int arr[2][3] =
    	{
    		{1,2,3},
    		{4,5,6}
    	};
    	
        //1.查看二维数组所占内存空间
    	cout << "二维数组大小: " << sizeof(arr) << endl;//结果为24
    	cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;//结果为12
    	cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;//结果为4
    
    	cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;//结果为2
    	cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;//结果为3
    
    	//2.获取二维数组首地址
    	cout << "二维数组首地址:" << arr << endl;//0x70fdf0
    	cout << "二维数组第一行地址:" << arr[0] << endl;//0x70fdf0
    	cout << "二维数组第二行地址:" << arr[1] << endl;//0x70fdfc
    
    	cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;//0x70fdf0
    	cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
    //0x70fdf4
        //说明二维数组首地址、第一行地址和第一个地址相同
    	system("pause");
    
    	return 0;
    }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦生dwu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值