/**二分法查找有序表(从小到大)中的某个值**/
#include <stdio.h>
#include <stdlib.h>
int binary_search(int key, int *a, int n)
{
int i,low,high,mid,count=0;
low = 0;
high = n-1;
while(low<high) //查找范围不为0时,进行循环
{
count++;//记录查找次数
mid = (low + high)/2;//中间位置
if(key<a[mid])//key值小于中间值时
{
high = mid - 1;//确定左子表范围
}
else if(key>a[mid])//key值大于中间值时
{
low = mid + 1;//确定右字表的范围
}
else if(key == a[mid])//key值等于中间值时
{
printf("查找成功!\n第%d次查找成功!\na[%d]=%d\n", count, mid, a[mid]);
count1++;
break;
}
}
if (0==count1)
{
printf("查找失败!\n");
}
return 0;
}
int main()
{
int i,j,len,key=0;
int *a;
printf("请输入需要查找的序列元素的个数:\n");
scanf("%d", &len );
a = (int *)malloc(sizeof(int) * len);
printf("请输入需要查找的序列:\n");
for(i=0;i<len;i++)
{
scanf("%d", &a[i]);
}
printf("请输入需要查找的数值:\n");
scanf("%d", &key);
binary_search(key, a, 10);
free(a);
return 0;
}
利用二分法从有序表中查找某个数值-C语言
最新推荐文章于 2024-10-11 18:00:59 发布
本文介绍了一种在有序数组中使用二分查找算法查找特定值的方法。通过不断缩小搜索范围直至找到目标值或范围为空为止,该算法实现了高效查找。文章提供了一个完整的C语言实现示例,包括输入数组和待查找的值。
1万+

被折叠的 条评论
为什么被折叠?



