C语言基础:一维整形数组
C语言定义:
数组是一组==相同数据类型== ==有限个==数据的集合。
1)数据类型相同
2)数据的个数有限个
功能 ,用来存储多个数据。多个变量。
分类:
一维整形数组
二维整形数组
一维字符数组 -》 1个字符串
二维字符串 -》 多个字符串
多维数组 -》 二维数组以上
1 定义数组
int a=3;// int 数据类型 数组名[整形常量]; int array[5]; // array 数组名(集合名) int [] 5 可以容纳5个int 的变量 int array2[2+3]; int array3[a+2];// error a是一个变量 void b;// 不能有 void类型的变量 void array4[5]; //不能有 void类型的数组
特性:
单一性 数据类型相同 2.连续性 内存空间连续存放 3.有序行 元素是有序的
2.数组元素的访问
数组名[下标]; [] 数组下标运算符 , 下标从 0 开始,表示第一个元素 下标 ,范围 0 - 容量-1; 常量,变量,表达式,类型是整形 数组不能整体操作 。定义完毕后,不能整体赋值。 int a[5]; a =10; // 错误的,不能操作。 数组访问的过程不要越界,越界后,行为不确定。 数组元素本身,可以做左值,或右值 a[0] = 10; // a[0] 数据类型 int 写入 第一元素 a[1] = 20; // 数组元素作左值 ,写入 a[2] = 30; a[3] = 40; // 这是最后一个元素 a[4] = 50; // 注意没有 a[5] , 这个一个越界的位置 错误 ,下标从0开始 // a[5] =60; // int c = 0; b = a[1]+1; // 数组元素作 右值,读出 a[c] =20;
3.初始化
int main() { // 定义+初始化 全部初始化 ,注意不要越界 int a[5]={1,2,3,4,5}; //局部初始化 // 初始化部分数据,剩下的全部是0 int a2[5]={1,2,3}; // 全部都是0 用的多 int a3[5]={0}; // 数组的容量可以是空的,但必须初始化 // ,编译器会根据初始化的个数,填入容量 int a4[] = {1,2,3}; // 不给容量,也没有给初值,编译报错 //int a5[]; int a5[]={0}; // a5 数组中,只有一个元素 return 0; }4.数组的遍历
遍历,有且只有一次,访问数组中所有的元素操作。 int a[50]={0}; 写入遍历 for(i=0;i<size;i++) { a[i] = rand()%1000; } 读出遍历 for(i=0;i<size;i++) { printf("%3d\t",a[i]); }5.数组的倒置
int temp =0; //倒置 for(i=0;i<size/2;i++) { temp =a[i]; a[i] =a[size-1-i]; a[size-1-i]= temp; } 6 .冒泡
冒泡 ,升序 相邻元素依次比较 如果前面的数大,交换两数 ,内层循环 ++ 一次 数组遍历一次 ,会找到最大值,并存储在数组的最后。外层循环 ++ 一次
int j = 0 ; for(j = size-1;j>0;j--) // 外层循环 j++ ,找到一个最大值,存储到最后 { for(i=0;i<j;i++) // 内层循环 i++ ,相邻元素比较 { if(a[i]> a[i+1]) { int t = a[i]; a[i] = a[i+1]; a[i+1] = t; } } } 7.选择
选择 ,升序 元素依次比较 如果前面的数大,交换两数 ,内层循环 ++ 一次 , 数组遍历一次 ,会找到最小值,并存储在数组的最前面。外层循环 ++ 一次 int j = 0 ; for(j=0;j<size-1;j++) { for(i=j+1;i<size;i++) { if(a[j]> a[i]) { int t = a[i]; a[i] = a[j]; a[j] = t; } } }插入排序
二分查找(折半查找)
前提条件:序列必须有序
思想(升序):将要查找的值和序列的中间位置值比较,比中间位置值大,则在后半序列中继续折
半查找,如果比中间值小,则从前半个序列中继续折半查找,如果恰好相等,则找到。
优势:效率高---->时间复杂度O(logn)
i = 0; j = len - 1; while (i <= j) { mid = (i + j) / 2; if (num > a[mid]) { i = mid + 1; } else if (num < a[mid]) { j = mid - 1; } else { printf("find %d\n", a[mid]); break; } } if (i > j) { printf("Not find\n"); }