数组:用来保存多个数据表类型相同的数据
一、整形数组
1.数组基础
定义:
类型说明符 (数组名)[常量];
eg.int a[10]
char str[32]
类型说明符:基本数据类型、构造数据类型
数组名:遵循标识符命名规则
常量:数组中可以保存的元素个数
2.数组元素的访问
数组名[下标]
下标代表访问第几个元素(0~总元素个数-1)
3.数组的初始化
1)全部初始化
int a[10]={1,2,3,4,5,6,7,8,9,0};
2)局部初始化
int a[10]={1,2,3,4,5};//1,2,3,4,5,0,0,0,0,0
3)初始化为0
int a[5]={0};//0,0,0,0,0
4.数组的存储形式
连续性、单一性、有序性
*5.数组排序
补充:
排序算法的稳定性:待排序列中出现两个相同数据,排序后,两个相同数据相对位置不变,则算法稳定,否则不稳定。
(1)选择排序(不稳定)
eg.升序
#include<stdio.h>
int main(void)
{
int a[7] = {2,-9,6,8,5,3,-1};
int len = sizeof(a) /sizeof(a[0]);
int i,j;
int tmp = 0;
for(i = 0;i < len-1;++i)
{
for(j = 0;j < len;++j)
{
if(a[i]>a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for(i = 0;i < len;++i)
{
printf("%d ",a[i]);
}
printf("\\n");
return 0;
}
时间复杂度(效率):O(n^2)
空间复杂度(空间/内存):O(1)
(2)冒泡排序(稳定)
相邻两两数据比较大小
eg.升序
#include<stdio.h>
int main(void)
{
int a[5]={5,-9,8,3,4};
int i,j;
int tmp = 0;
int len = sizeof(a) / sizeof(a[0]);
for(j = 0;j < len; ++j)
{
for(i = 0;i < len-j-1; ++i)
{
if(a[i]>a[i+1])
{
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
for(i = 0;i < len; ++i)
{
printf("%d ",a[i]);
}
printf("\\n");
return 0;
}
(3)插入排序
以后补充
二分查找(折半查找)
注:序列必须有序
#include<stdio.h>
int main(void)
{
int a[] = {5,-6,9,63,25,-45,88,46,85};
int len = sizeof(a) /sizeof(a[0]);
int i,j,tmp;
int mid = 0;
int num = 35;
for(j = 0;j < len-1;++j)
{
for(i = 0;i < len-j-1 ; ++i)
{
if(a[i]>a[i+1])
{
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}//序列有序
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]);
}
}
if(i > j)
{
printf("NOT FIND\\n");
}
return 0;
}
优势:效率高
二、字符型数组
1.字符型数组的定义
同上
2.字符型数组的元素访问
同上
3.字符数组的初始化
1)局部初始化
char str[32]={'h','e'.'l','l','o'};
等同于char str[32]={"hello"};
等同于char str[32]="hello";
没有初始化的部分默认存储为0(‘\\0’)
0 ————> ' \\0 '
48———> ' 0 '
"0"———> ' 0 '+ ' \\0 '
2)全部初始化
char str[5] = {'h', 'e', 'l', 'l', 'o'};
char str[] = {'h', 'e', 'l', 'l', 'o'};
char str[] = {"hello"}:
char str[] = "hello";
当[ ]常量被省略时,将来数组空间按照初始化后的字符个数去确定,额外增加‘\\0'字符的存储位置
3)初始化为0
char str[32] = {0};
char str[32] = {'\\0'};
4.字符型数组的存储
- 单一性:char
- 有序性:str[0] = str[n]\\
- 连续性:连续空间
5.字符型数组的输入输出
-
输出
printf("%s\\n", str);
puts(str); //自带换行符
-
输入
scanf("%s",str); //需要空格、tab、Enter停止读入
gets(str); //危险的函数,有可能造成越界
6.字符型数组操作方法
- strlen(str) : 计算字符串的长度(字符型数组中有效字符的个数,不包含”\\0')
-
strcpy:把源字符串拷贝到目标字符型数组中
strcpy(dst目标字符, src源字符串);
-
strcat:将源字符串拼接到目标字符串的后边
-
strcmp:比较两个字符串大小
网硕互联帮助中心



评论前必须登录!
注册