您的位置:首页 > 编程语言 > C语言/C++

C语言实现二分查找

2019-04-24 21:17 162 查看

下面为在数组a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 }中实现二分查找的代码

#include<stdio.h>
#include<stdlib.h>
void binary_search(int *arr, int right, int k) //二分查找函数
{
int left = 0;  //lef为数组第一个元素下标,right为数组最后一个元素下标
while (left <= right)
{
int mid = (left + right) / 2; //mid为中间元素下标
if (arr[mid] > k)
{
right = mid - 1;
}
else if (mid[arr] < k)
{
left = mid + 1;
}
else
{
printf("找到了,下标为:%d\n", mid);
break;
}
}
if (left>right)
printf("找不到!\n");
}
int main()
{
int n;
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 };
int ret = sizeof(a) / sizeof(a[0]) - 1;
printf("请输入要查找的数:\n");
scanf("%d", &n);
binary_search(a,ret,n);//调用函数,求出结果
system("pause");
return 0;
}

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: