嵌入式学习 Day7

一. 对齐:

1. 单行对齐 

  命令模式下按两下 == 

2. 多行对齐:

  shift+v 选中 
  按一下 =  
  
  起始行 = 结束行 

3. 全局对齐:

  起始行 = 结束行 
  gg      G(shift + g)  

二. 数组:

1.数组概念

可一次性定义多个变量,本质上是相同类型变量的集合


2. 数组语法:

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

int a[10];


(1).类型说明符 
    整型 
       int,short,long ,long long 
    浮点 
    字符  

int a = 10;   //a int型 

int a[10];     //a所代表的类型 是int[10]        
int [10]a;     //a所代表的类型 int[10] 

数组本身也是一种数据类型。它是由相同类型的元素按照一定顺序组成的一种复合数据类型。

    
(2).数组名 
    代表着 数据集合 (是数组在内存空间的名字) 
    数据类型角度 
    1. a代表整个数组的数据类型 
    2. a代表一个值 --数组首元素的地址 

代表的数据类型 ---数组类型 int a[10]; //a所代表的类型为int[10] //数组类型 
   代表的值           ---数组首元素的地址   // &a[0]

    
(3).常量表达式 

表示数组的长度 --- 变量的个数 

eg:

int a[5];      //定义一个数组,这个数组放了5个 int型变量 

数组长度可以省略 ,但有前提 ----必须要有初始化的值 
int a[] = {1,2,3};    //编译器会通过值来计算出数组长度 

3.数组的初始化 (赋值)

int a[10] = {1,2,3,4,5,6,7,8,9,10}; //全部初始化 
int a[10] = {1,2,3,4,5};  //部分初始化---将值依次给到数组元素 ,没有给值的元素,默认初始化为0
将数组初始化为0 
int a[10] = {}; //都初始化为0
int a[10] = {0}; //都初始化为0 

数组不初始化 ---数组中为垃圾值

数组赋值不能整体赋值,需要一个元素一个元素个给到


4. 数组下标:

a[下标];

下标范围      [0~数组长度-1]

 eg:int a[10];
   [0~9]

 
  a[i]          //下标运算 ---本质是一个地址运算 
                  下标代表偏移量  

5. 数组在内存中的特点

 连续性: 定义一个数组会开辟一片连续的空间
 有序性: 数组中的元素按下标位置依次存储
 单一性: 数组中只能存储同一类型的元素

6.注意

数组的越界问题:

eg: int a[10]

    a[-5]
1.不是语法问题 --- 编译器不报错 
2.程序员 自己小心 


练习:
  准备一个数组 10个元素 
  找出数组中的最大值 


  打擂台的思想求 max 和 min
 

三. 排序 

按一定的顺序排列 
   
   升序  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  //数值 

0号位置:
   找最小值 
   i = 0;
   for (j = 1; j < len; ++j)
   {
       if (a[j] < a[0])
       {
          交换
       }
   }
   
1号位置:
   找最小值 
   i = 1;
   for (j = 2; j < len; ++j)
   {
       if (a[j] < a[1])
       {
          交换
       }
   }   


   for (i = 0; i < len-1; ++i)  //位置 0 ~ len-1  控制(遍历)要选数的位置;只需确定前len-1个                                             位置
   {
       for (j = i+1; j < len; ++j)      //往后遍历找数;j 代表要选数的位置的后一位;保证能比到                                                       最后一个位置的数
       {
           if (a[j] < a[i])   //拿着 a[i] 去对比看后面是否有更小的数,若有把更小的数放上去(要                                      找数的位置),把原来的放下来(放到所遇到的更小的数的位置)
           {
              交换
           }
       }   
   }

2. 冒泡排序:

思想:相邻两个元素两两比较,小的放前,大的放后。  
0 1 2 3 4 5 6 7  //下标 
1 5 3 6 8 7 2 4  //数值 

第1趟

两两比较 7 次,冒出一个数 8 

for (i = 0;i < 7; ++i)

{

        if (a[i] > a[i+1])     //相邻比较,小往前走,大往后走

         {

            交换

         }

}

第2趟(冒第二趟时相当于少了一个数)

两两比较 6 次,冒出一个数 7 

for (i = 0;i < 6; ++i)

{

        if (a[i] > a[i+1])     //相邻比较,小往前走,大往后走

         {

            交换

         }

}

......

第7趟 (总共要冒 n-1 趟)

两两比较 1 次,冒出一个数 2

for(j = 1;j < n; ++j)// 控制趟数,走一趟冒出一个数,得能到 n-1 趟;最后一个数不用冒

{

       for (i = 0;i < n-j ; ++i)  // 遍历数组,进行两两比较;因为冒出一个相当于少一个数                                                      (位置定了)所以两两比较的次数受到趟数的影响

       {

               if (a[i] > a[i+1])       //相邻比较,小往前走,大往后走

               {

                  交换

               }

        }

}

你可能感兴趣的:(linux,c语言,算法,数据结构)