pute day7 数组


数组概念


  数组 是 一组相同类型的数据集合 (变量的集合)


整型数组 
  一维整型 
  二维整型 
字符型数组 
  一维字符型 
  
  
数组:
   数组也是一种数据类型 
    
   int a; //
   数据类型 变量名; //标识符 
   
   
一维整型数组:


  类型说明符 数组名[常量表达式];
  

   类型说明符 
       基本数据类型 int /float /char 

   数组名 
      名字 --标识符 -- 命名规则 
      
   
      表示 --你现在定义的是一个数组类型 
      
   常量表达式 
      数组长度 代表的是 批量的定义了多少个 变量(数据)
      
      
  int a[10]; //表示,定义了一个 包含了 10 个 int元素(变量)的数组 
  
  
   int a; //
   数据类型 变量名; //标识符 
   
   int a[10];   //标识对应的数据类型怎么看?
                //干掉标识符 ,剩下的就是标识符对应的类型 
   
   int[10] a; //int[10] --数组类型 
       


       
数组的给值:


  //初始化
    int a[10] = {1,2,3,4,5,6,7,8,9,10}; //{} 表示 初始化器 
 
    内存放 是怎样存放的?
    数组 是一片连续的空间
    数组特点:
    连续型 
    单一型
    有序性
  //数组元素赋值 

数组:
   1.一组相同类型的数据的集合 
   2.数组 是一种数据类型   (构造数据类型)

构造数据类型:

数组的定义:
   
  数据类型 数组名[数组长度]; 

 eg:
  int a[10]; 
  
  int 
  [] //表示的就是数组 

数组的特点:
  连续性 
  单一的 
  有序性 
------------------------------
  int a[10]; 
  

数组给值:
  初始化
  int a[10] = {1,2,3,4,5,6,7,8,9,10}; //全部初始化 
  int a[10] = {1,2,3,4,5}; //部分初始化  ---给出的值,按数组元素顺序依次给到,未给出的值,默认初始化为0 
  int a[10] = {0}; //初始化为0 
  int a[10] = {}; // {} 初始化器 全部初始化为0 
  int a[10]; //不初始化 --此时每个元素中是随机值
  int a[]; //定义数组时,长度可以省略,但是要求,必须有初始化的值 
           //此时数组长度,由编译器根据 初始化值的个数推算
  赋值: //只能给到具体的数组元素 
  
  a[0] = 1;
  a[1] = 2;
  
  数组每个元素都给到值,需要循环
  
  scanf("%d",&a[0]);
  
  
 

注意:
   数组不能整体赋值 
   a 代表数组整体 这个类型 不能整体赋值 
   能赋值的是,数组的每个元素    


  
数组的访问:


  
  语法格式:
   数组名[下标] // 此时的[]不同于定义时的[],此时的[]表示的是数组下标运算 (运算符)

  int a[10];
   下标:
   整型数 
   0~数组长度-1 
   
   下标的本质--实际上是一个偏移量,针对于数组起始位置的偏移量 //指针 


   
   
  数组名:


  
     数组名[下标] //所谓的数组下标运算,本质上是一个指针运算
     
     数组名 ---所代表的类型  ---数组类型 
              所代表的值    ---数组首元素的地址
              
    int a = 10;
    a[0]
    
    
//    1+2
//    2+1 
问题:
   1. 数组的越界访问
      编译器不检查
      程序员自己小心 

排 序:  
   


  升序  1 2 3 4 5 6 
  降序  6 5 4 3 2 1 
   
时间复杂度 
空间复杂度 

选择排序:


  思想:
     给合适位置,(选择)合适的数放
  思路:
  

选择
for (i = 0; i < n-1; ++i)
{
    for (j = i + 1; j < n; ++j)
    {
        if (a[i] > a[j])
        {
            交换
        }
    }
}


i = 0    n-1
i = 1    n-2
i = 2    n-3
...
i = n-2  1   

1+2 + .... + n-1

(1+n-1)*(n-1) /2

n*(n-1)/2
  
  
   n^2/2 - n/2 
 
 
 O(n) = n^2  //大O计法 


 
  
冒泡排序:


  思想:
    相邻的两个元素,两个比较,小的放前,大的放后。

冒泡:
for (i = 1; i < n; ++i)
{
    for (j = 0; j < n-i; ++j)
    {
        if (a[j] > a[j+1])
        {
            交换
        }
    }
}


第1趟       n-1 
第2趟       n-2
第3趟       n-3

...
第n-1趟     1   

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值