二分查找:
通过定义begin;end;mid;这三个值通过先对数组内的元素进行排序然后利用n与mid比较进行循环查找。其算法复杂度为log2n。
例:
#include<stdio.h>
int main()
{
int begin = 0, end = 8, mid,len;
int a[] = {1,2,3,4,5,6,7,8,9};
len = sizeof(a) / sizeof(a[0]);
int i,j,n=7;
for(i = 0;i < len-1;++i)
{
for(j=i+1;j<len ;++j)
{
if(a[i]>a[j])
{
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
for(i = 0;i<len;++i)
{
printf("%d\n",a[i]);
}
while(begin <= end)
{
mid = (begin +end) / 2;
if(mid < n)
{
begin = mid + 1;
}
else if(mid > n)
{
end = mid -1;
}
else
{
break;
}
}
if(begin <= end)
{
printf("found\n");
}
else
{
printf("not found\n");
}
return 0;
}
字符型数组:用于存放字符的数组,其本质是字符串。PS:数组最后一个字符是'\0'。
输出字符串函数(指针函数):
int puts(const char *s) 用法:puts(s) ~ s为数组名(字符数组名代表首元素的地址)
输入字符串函数:
char *gets(char *s) 用法:gets(s) ~ 在输入字符串时记得输入个数要小于数组的容量不然会引起越界访问。
char *fgets(char *s,int size,FILE *strem) 用法:fgets(s,sizeof(a) / sizeof(a[0] ,stdin)可以防止输入过多导致越界访问,只会存放进能容纳他的字符个数,但是无法识别换行符或别的操作符会将其认为是输入的字符,导致无法进行下一步操作
scanf函数是我们输入的老朋友了,他在输入字符时不管是“ ”还是回车等都不会被识别为输入字符而是中止输入导致输入不完全。
统计有效字符个数的函数:
size_t strlen(const char *s) ~ 用法:strlen(s),在调用这个函数时需要头文件调用<string.h>库,其返回值为无符号长整型数据,用于统计有效数字的个数。
拷贝数组的函数:
char *strcpy(char *dest,const *strc) ~ 用法:strcpy(s1,s2),s2的数据内容拷贝给s1,使用时为了防止发生越界访问通常会让目标数组的容量足够大,最少为源数组的有效字符数+1。
连接数组的函数:
char *strcat(char *dest,const char*strc) ~ 用法:strcat(s1,s2)将s2的内容拼接到s1的内容后面。
数组之间进行比较的函数:
int strcmp(const char *s1,const char *s2) ~ 用法:strcmp(s1,s2)将s1的地址所对应的数据与s2的地址所对应的数据进行做差,大于为正小于为负等于为0;