C语言入门第七天---二分查找+函数(第一部分)

哈喽各位看官老爷,我失踪人口回归啦,废话不多说,让我们开始今天的学习


一、二分查找

在一个指定的有序数组中,查找具体的一个数---二分查找

比如:

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比较大的时候可能存在问题,可以使用下面的方式:

mid = left+(right-left)/2;

二、函数的概念

在C语⾔中引入函数(function)的概念,有些翻译为:子程序,子程序这种翻译更加准确⼀些。
C语⾔中的函数就是⼀个完成某项特定的任务的⼀小段代码。这段代码是有特殊的写法和调用方法的。
C语⾔的程序其实是由⽆数个小的函数组合而成的,也可以说:⼀个大的计算任务可以分解成若⼲个较小的函数(对应较小的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以复用的,提升了开发软件的效率。
在C语⾔中我们⼀般会见到两类函数:
•  库函数(现成的函数,可以直接使用)
•  自定义函数(自己创造的函数)

三、库函数

1.标准库和头函数

我们前面内容中学到的 printf、 scanf 都是库函数,库函数的也是函数,不过这些函数已经是现成的,我们只要学会就能直接使用了。有了库函数,一些常见的功能就不需要程序员自己实现了,一定程度提升了效率;同时库函数的质量和执行效率上都更有保证。

库函数相关头文件: https://zh.cppreference.com/w/c/headericon-default.png?t=N6B9https://zh.cppreference.com/w/c/header

2.库函数使用方法

C/C++官方的链接:https://zh.cppreference.com/w/c/headericon-default.png?t=N6B9https://zh.cppreference.com/w/c/header

cplusplus.com::https://legacy.cplusplus.com/reference/clibrary/icon-default.png?t=N6B9https://legacy.cplusplus.com/reference/clibrary/

这些网站可以用来学习库函数,大家有空可以看看


有人私信我向我反应,之前的博客内容较多,有些消化不了,现在我改进一下,我们一天的容量缩小啦!

(如果还有别的问题,请大家及时私信我,希望大家一起进步!!!!)

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值