哈喽各位看官老爷,我失踪人口回归啦,废话不多说,让我们开始今天的学习
一、二分查找
在一个指定的有序数组中,查找具体的一个数---二分查找。
比如:
int arr[] = {1,2,3,4,5,6,7};
int k = 7;
//在arr数组中,寻找7
//如果找到了就打印下标
//找不到,就打印:找不到
实际操作代码:
int main()
{
int arr[] = { 1,2,3,4,5,6,7};
int k = 7;
scanf("%d", &k);
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int find = 0;//假设一个变量,表示找不到
for (i = 0; i < sz; i++)
{
if (k == arr[i])
{
printf("找到了,下标是%d\n", i);
find = 1;
break;
}
}
if (find == 0)
{
printf("找不到");
}
return 0;
}
这样确实是找到了我们想找到的数字,但是有点麻烦,接下来我们来看一个更为简单的方法:
由我们第五天学习的猜数字游戏中,我们能获得启发,在查找一个数字的过程中,我们可以采用折半的思路进行查找,这样就可以每次缩小一半的范围,这种思路我们叫做二分查找,或者折半查找。
实际操作代码:
int main()
{
int arr[] = { 1,2,3,4,5,6,7};
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int key = 7;//要找的数字
int mid = 0;//记录中间元素的下标
int find = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
find = 1;
break;
}
}
if (1 == find)
printf("找到了,下标是%d\n", mid);
else
printf("找不到");
}
求中间元素的下标,使用 mid = (left+right)/2 ,如果left和right比较大的时候可能存在问题,可以使用下面的方式:
二、函数的概念
三、库函数
1.标准库和头函数
我们前面内容中学到的 printf、 scanf 都是库函数,库函数的也是函数,不过这些函数已经是现成的,我们只要学会就能直接使用了。有了库函数,一些常见的功能就不需要程序员自己实现了,一定程度提升了效率;同时库函数的质量和执行效率上都更有保证。
库函数相关头文件: https://zh.cppreference.com/w/c/headerhttps://zh.cppreference.com/w/c/header
2.库函数使用方法
C/C++官方的链接:https://zh.cppreference.com/w/c/headerhttps://zh.cppreference.com/w/c/header
cplusplus.com::https://legacy.cplusplus.com/reference/clibrary/https://legacy.cplusplus.com/reference/clibrary/
这些网站可以用来学习库函数,大家有空可以看看
有人私信我向我反应,之前的博客内容较多,有些消化不了,现在我改进一下,我们一天的容量缩小啦!
(如果还有别的问题,请大家及时私信我,希望大家一起进步!!!!)