嵌入式学习日记 7

数组


零、题外话:linux中代码的快捷对齐方式


    单行对齐:在命令模式下 按两下等号
    多行对齐:shift+v选中 按一下等号
    起始行 = 结束行
    全局对齐:
    gg = shift + g


一、数组概念:


    一组相同类型的数据的集合
    
    要怎么一次性定义多个变量?    //本质上是 相同类型变量的集合
    
    一维数组
    二维数组
    整型 字符型
--------------------------------------
    语法:    //定义数组
    类型说明符 数组名[常量表达式];
    
    (1).类型说明符
        整型
            int,short,long,long long
        浮点
        字符
    (2).数组名
        代表着 数据集合 (内存空间的一个名字)
    (3).[]    //表示此时定义的是一个 数组
    (4).常量表达式
        表示数组的长度 --- 变量的个数
    eg:
    int array[5];    //定义一个数组,这个数组放了5个 int 形变量
    
    数组本身也是一种数据类型
        类型 ---
        类型:
            常量
            变量
            
            大小
            内存
            
            int a = 10;    //a int型
            int [10];    //a所代表的类型 是
            int[10]    a;    //a所代表的类型 int[10] (不能这么写)
                        //a ---把名字去掉,剩下的就是名字对应的数据类型
            int a[10];    //数组在内存空间上的特点
            a代表数组所在空间名字,数组首元素的地址编号
            //数组的给值
            //初始化
            //赋值
            int a[10] = {1,2,3,4,5,6,7,8,9,10};    //{}表示初始化 花括号叫 初始化器
                                                //全部初始化
            //数组元素的访问
            语法:
            a[下标];    //这里的下标是 从0 开始的 数组名中的标号是 从1 开始的
            数组下标:
                本质上是 偏移量


            
            二、数组的特点:


                连续性 -- 占用一片连续空间
                有序性 -- 元素一次存储
                单一性 -- 单一(相同)类型的元素
            a[i]    //下标运算 --- 实际是一个地址的运算
            下表本质上是一个偏移量
            
            数组的越界问题:
            1.不是语法问题 --- 编译器不报错
            2.程序员如何避免? --- 自己小心吧
            
    注意:
        a.数组名
            代表的数据类型 -- int a[10];    //a所代表的类型为int[10]    //数组类型
            代表的值       -- 数组首元素的地址
        b.数组长度 与 下标
            数组长度 -- 表示几个元素(变量)
            下标 -- 偏移量
                [0~数组长度-1]
            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] = {};
            int a[10] = {0};
            
            如果数组不初始化 --- 数组中为垃圾值
            
        数组长度可以省略 但必须要有初始化的值
        int a[]={1,2,3}; //编译器会根据值来 计算 数组长度
        
        数组赋值 不能整体赋值 需要一个元素一个元素给到
    练习:
    准备一个数组 找最大值 次大值
    


    
   三、排序


        按一定的顺序排序
        
        升序 1 2 3 4
        降序 4 3 2 1
        
        1.选择排序:
        思想:
            为合适的位置,选择一个合适的数;
            
            0 1 2 3 4 5 6 7    //下标
            1 5 3 6 8 7 2 4    //数值


      1. 选择排序法(非常关键说是

   for (i = 0; i < len-1; ++i)  //位置 i = len-1  ---控制位置
   {
      //找最小值 
       //i = 1;
       for (j = i+1; j < len; ++j) //找数 
       {
           if (a[j] < a[i])
           {
              交换
           }
       }   
   }

主要思想:永远选最小数 放到最前面的位置

2.冒泡排序法(也非常关键
 

for(i=0;i        {    
          for(j=i+1;j           {
              if(a[j]              {
                  mid = a[i];
                 a[i] = a[j];
                  a[j] = mid;
             }
        }    
    }      

主要思想:两项比较 大的往后跑 一轮选出一个最大值 n-1轮就能全换对

你可能感兴趣的:(学习,算法)