一、题目要求
在一个有序数组中,查找某一个数字,如果能找到,则输出它的下标,如果找不到,输出该数字不存在。
二、解题思路
有一种简单的方法是遍历整个数组,但是这种方法的时间复杂度较高,且逼格不够高。所以我们采用一种较为高级的方法。
二分法,顾名思义,就是把数组分成两部分,每次都分成两部分,这样一下子就能缩小一半的范围。为了便于大家理解,这里我举个栗子:你买了一杯饮料,并且说价格在20之内。让我猜多少钱,那我肯定会先猜10元,然后你说猜低了,那我就会再猜15元,这时你又说猜高了,那我就会猜12元,然后再问几次,这时就可以猜出饮料的价格了。这种从中间折半猜价格的方法就是二分法。
画个图便于大家理解:
粉色的数字⭕️1,代表第一次猜的价格,
粉色的数字⭕️2,代表第二次猜的价格,
粉色的数字⭕️3,代表第三次猜的价格,
在图里可以发现,范围是一半的在缩小,二分法也是这样的原理。
三、代码解题
#include <stdio.h>
int main()
{
int input = 0; //初始化要查找的数字
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个有序数组
printf("请输入你要查找的数字->");
scanf("%d", &input);
int sz= sizeof(arr) / sizeof(arr[0]);//sz是数组的长度
//sizeof这个函数是用来求数组的长度的,单位是字节。
//sizeoff(arr)求出这个数组的总长度,sizeoff(arr【0】)求出一个字符的长度
//总长度/