折半查找法(基于有序数组)

折半查找的方法优点:
比较次数少,查找速度快,平均性能好,要求待查表为有序表
存储结构一定是顺序结构
代码实现:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int to_find = 4;
int left = 0;
int right = sizeof(arr) / sizeof(arr[0] - 1);
int mid = 0;
while (left <= right) //right最后一个元素的下标写成<=是因为[left,right]
{ //是闭区间,如果写成<的话就会导致当left=right时,
mid = (left + right) / 2; //循环走不进去,也就失去了一次比较的机会
if (to_find < arr[mid])
{
right = mid - 1; //刨除mid这样的临界值
}
else if (to_find>arr[mid])
{
left = mid + 1;
}
else //to_find=arr[mid]
{
break;
}
}
if (left <= right) //找到了
{
printf(“找到了!下标为%d\n”, mid);
}
else
{
printf(“没找到!\n”);
}
system(“pause”);
return 0;
}
//上面的while循环退出的可能有两种:
//1.while里面left<=right条件不满足
//2.找到了元素就break了

猜你喜欢

转载自blog.csdn.net/weixin_43224539/article/details/82959942