二分法查找
二分法查找,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。该算法的基本思想是将数组分成两半,比较中间元素与目标值的大小,然后选择一半继续查找,直到找到目标值或确定目标值不存在。
步骤
-
确定数组的左右边界索引,通常左边界为0,右边界为数组长度减1。
-
在循环中,计算中间索引mid,并将中间元素与目标值进行比较。
-
如果中间元素大于目标值,则将右边界移动到mid - 1。
-
如果中间元素小于目标值,则将左边界移动到mid + 1。
-
如果中间元素等于目标值,则找到目标值的索引,结束查找。
-
如果左边界大于右边界,则表示目标值不在数组中
举例见刷题记录第三题
函数讲解
1.函数是什莫
C语言中的函数就是⼀个完成某项特定的任务的⼀⼩段代码,这段代码是有特殊的写法和调⽤⽅法的。 C语⾔的程序其实是由⽆数个⼩的函数组合⽽成的,也可以说:⼀个⼤的计算任务可以分解成若⼲个较⼩的函数(对应较⼩的任务)完成。
函数一般会有输入参数并有返回值,提供对过程的分装和对细节的隐藏,这些代码常被集成为软件库。
2.C语言中函数的分类
1)库函数
分类:
IO函数
字符串操作函数
字符操作函数
内存操作函数
时间/日期函数
数学函数
其他库函数
使用库函数必须引用其对应的头文件
库函数查询工具
2)自定义函数 (重要)
自定义函数与库函数十分相似,有返回值,函数类型和函数参数。不过都要自己设计
函数的组成
返回类型 函数名(函数的参数)
{ ---------------函数体
语句项; ---------------函数体
} ---------------函数体
例如设计一个函数求出a,b中较大的数
#include<stdio.h>
int n(int x, int y)
{
int a = 0;
a = x > y ? x : y;
return a;
}
int main()
{
int a = 99;
int b = 101;
int max = n(a, b);
printf("%d", max);
return 0;
}
此时n这个函数就实现了求a,b中较大值的任务。
在这块n叫做函数名,n前面的int是n这个函数的返回类型,x,y是函数中的两个参数。
函数体中return a是让函数的返回值是a也就是说这个函数运行后会返回a。
可以通过n(a,b)来调用它
下面有一个问题,用一个例子来说明一下
#include<stdio.h>
void n(int x,int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int a = 22;
int b = 33;
n(a,b);
printf("%d%d", a, b);
return 0;
}
这里n的目的是把a,b的值交换一下,因为只是交换所以不需要返回神莫东西
因此在返回类型处是void也就是无。
不过这个函数有个问题,它并不能把a和b交换过来。
理由:
a会在储存空间中开辟一个地址b也同样,22,和33分别放在其中而n这个函数它的参数x和y也会
弄两个与a和b不一样地址。在n函数内部x与y的确交换了不过他们的地址与ab并不一样,所以就
造成了一个情况,xy交换了但与ab没半毛钱关系就很尴尬。
这里要解决这个问题就需要做出如下更改
#include<stdio.h>
void n(int*px,int*py)
{
int z = 0;
z = *px;
*px = *py;
*py = z;
}
int main()
{
int a = 22;
int b = 33;
n(&a, &b);
printf("%d%d", a, b);
return 0;
}
这里&a,&b会把a与b的地址给到指针变量px和py所以改变*px就能达到改变a的目的,*py同理
通过指针就把a与b和我们自定义函数中的两个参数联系起来了
函数的参数
n(a,b)在函数调用中a和b是真实传递给函数的参数叫做实际参数-----实参
在定义函数时的int x,int y叫做形式参数------形参
形参是实参的临时拷贝,改变形参对实参没有影响
刷题记录
1.求n的阶乘
2.求1!+2!+3!+...+10!
3.从一个有序数组中查找k并输出其下标
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int l = 0;
int all = sizeof(arr) / sizeof(arr[1]);
int r = all - 1;
int m = 0;
int k = 0;
scanf_s("%d", &k);
while (l<=r)
{
m = (l + r) / 2;
if (arr[m] > k)
{
r = m - 1;
}
else if (arr[m] < k)
{
l = m + 1;
}
else
{
printf("找到了,下标是%d\n", m);
break;
}
}
if (l > r)
{
printf("无\n");
}
}
4.将三个整数从大到小输出
#include<stdio.h>
int main()
{
int a, b, c;
scanf_s("%d%d%d", &a, &b, &c);
if (a < b)
{
int d = 0;
d = a;
a = b;
b = d;
}
if (a < c)
{
a = a + c;
c = a - c;
a = a - c;
}
if (b < c)
{
b = b + c;
c = b - c;
b = b - c;
}
printf("%d %d %d ", a, b, c);
return 0;
}
标签:return,函数,int,C语言,学习,查找,printf,目标值 From: https://blog.csdn.net/2402_87772772/article/details/142786849