二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
2023-12-17 08:39:08
二分查找的概念
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
实现原理
- 首先,假设表中元素是按升序排列,将表中的位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
- 否则利用中间位置记录将表分成前、后两个子表
- 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
- 重复以上过程,直到找到满足条件的记录,使查找成功。或直到子表不存在为止,此时查找不成功
图解
?
算法效率
时间复杂度为 O(log2n)? 也就是说查找的最大次数为log2n
优点:查找效率高
缺点:必须采用顺序存储结构,,必须按关键字大小有序排列。
使用C语言代码实现
//二分查找
//给定一个有序数组,任意给定一个值,查找该值在数组的位置
int main()
{
int arr[] = { 5,9,12,15,20,32,36,42,56,78,89 };
int key = 36; //要查找的值
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
int flag = 0;//标志位
while (left <= right)//当数组未查找完成时
{
int mid = (left + right) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
printf("arr[%d]=%d\n", mid, key);
flag = 1;
break;//如果没有break,代码会陷入死循环
}
}
if (!flag)
{
printf("can't find!!\n");
}
return 0;
}
文章来源:https://blog.csdn.net/2302_78391795/article/details/135004096
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!