一.二分法查找(效率极高)
算法复杂度:log2n
1.初始条件:确保数组是有序的(升序或降序)。
2.设定左右边界:设定初始的左边界 begin
和右边界 end,一般为数组的起始和结束位置,即 begin = 0
,end = n - 1
。
3.计算中间位置:计算当前查找范围的中间位置 mid
,通常使用公式 mid = (begin + end) / 2
4.
比较中间元素:将中间位置的元素 s[mid]
与目标元素 n
进行比较
如果 s[mid] > n
,则目标元素在左半部分,将右边界end调整为 mid - 1
如果 s[mid] < n
,则目标元素在右半部分,将左边界beign调整为 mid + 1
如果 s[mid] == n
,则找到了目标元素,返回 mid
5.重复步骤3和步骤4,直到begin > end
示例:
#include<stdio.h>
int main(void)
{
int a[] = {-1,3,6,2,8,45,-7,-9,9,11};
int n =12;
int len = sizeof(a) / sizeof(a[0]);
int i,j;
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,",a[i]);
}
int begin,end,mid;
begin = 0;
end = len-1;
while(begin<=end)
{
mid = (begin + end) / 2;
if(a[mid] > n)
{
end = mid -1;
}
else if(a[mid] < n)
{
begin = mid +1;
}
else
{
break;
}
}
if(begin <= end)
{
printf("found\n");
}
else
{
printf("not found\n");
}
return 0;
}
二.字符数组
字符数组通常用于存储字符串。字符串是以字符数组的形式表示,并且以空字符 \0
结尾来标志字符串的结束。
在读取时字符数组不以长度len作为结束条件,而"\0"
gets fgets 比较
1.gets
char *gets(char *s);
形参是指针,需要一个地址
返回值也是指针
注意使用gets时要注意字符数组定义的空间大小,以免造成越界访问
2.fgets
char *fgets(char *s, int size, FILE *stream);
形参包括三部分,地址,要放入的字符数组大小,stdin
返回值是指针型
三. 对字符串进行操作
1.字符串拷贝
#include <string.h>
char *strcpy(char *dest, const char *src);
dest 指的是目标数组,src表示源数组
代码实现过程:
#include<stdio.h>
int main(void)
{
char s1[100]= "hello world";
char s2[100];
int i=0;
while(s1[i] !='\0')
{
s2[i] = s1[i];
++i;
}
s2[i] = '\0';
printf("%lu\n" , strlen(s2));
return 0;
}
2.字符串连接
#include <string.h>
char *strcat(char *dest, const char *src);
代码实现:
#include<stdio.h>
int main(void)
{
char s1[100] = "Hello";
char s2[100] = "world";
int i,j;
i = 0;j=0;
while(s1[i] !=0)
{
++i;
}
while(s2[j] !=0)
{
s1[i] = s2[j];
++i;
++j;
}
s1[i] = '\0';
puts(s1);
return 0;
}
3.字符串比较
#include <string.h>
int strcmp(const char *s1, const char *s2);
若s1 > s2,返回值大于0
若s1 = s2,返回值等于0
若s1 < s2,返回值小于0
#include<stdio.h>
int main(void)
{
char a[100] ="world";
char b[100] ="Hello";
char c[100] ="china";
char max[100];
if(strcmp(a,b) > 0)
{
strcpy(max,a);
}
else
{
strcpy(max,b);
}
if(strcmp(max,c) < 0)
{
strcpy(max,c);
}
puts(max);
return 0;
}
4.strlen
用于计算字符数组中字符串的有效数