题目:在一个整形的有序数组中,利用二分查找的方法来查找具体的某个数。
有的人会问,在一个整形的有序数组中,来查找具体的某个数,直接用下面代码就可以了,还有要用什么二分查找,说的有理,但是,下面的那种代码效率不高,
正所谓技多不压身,既学到知识,又学到方法,对不对,那咱们好好讲讲-----整形有序数组中查找具体的某个数(二分查找)。
首先呢,我要了解怎么用二分查找:
其次,就要用代码解决啦
#include<stdio.h>
#include<string.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int right = sizeof(arr)/sizeof(arr[0]); //这里用arr10个数字除以一个arr的大小
int left = 0; //定义最左边的下标
int k = 3; //找的数
int mid = (left + right) / 2; //中间数 == 找的数
int flag = 1; //采用flag如果找到了flag=1,找不到flag=0
while (left <= right) //利用循环 当left <= right 就继续找
{
if (k == arr[mid]) //找到了
{
printf("找到了,下标为:%d\n", mid);
flag = 1;
break;
}
else
{
flag = 0;
if (k > arr[mid]) //找到的数小了
{
left = mid + 1;
}
else //大了
{
right = mid - 1;
}
}
mid = (left + right) / 2; //注意
}
if (flag == 0)
{
printf("找不到\n");
}
return 0;
}
//如果数组很大的话用mid = (left - right) / 2 + left;
不知不觉就到了尾声啦,作为小白的我,写的不是很好,不对的地方还请指点指点。