二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现

二分查找的概念

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

实现原理

  1. 首先,假设表中元素是按升序排列,将表中的位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
  2. 否则利用中间位置记录将表分成前、后两个子表
  3. 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  4. 重复以上过程,直到找到满足条件的记录,使查找成功。或直到子表不存在为止,此时查找不成功

图解

算法效率

时间复杂度为 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;
}

相关推荐

  1. C语言使用qsortbsearch实现二分查找

    2023-12-20 15:34:02       39 阅读
  2. 简单二分查找C++算法

    2023-12-20 15:34:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-20 15:34:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-20 15:34:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-20 15:34:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-20 15:34:02       18 阅读

热门阅读

  1. Vue Teleport和Vue的介绍

    2023-12-20 15:34:02       38 阅读
  2. 【算法】【动规】摆动序列

    2023-12-20 15:34:02       45 阅读
  3. excel技巧

    2023-12-20 15:34:02       39 阅读
  4. 【.Net 6.0--通用帮助类--总览】

    2023-12-20 15:34:02       47 阅读
  5. Spark报错:顶级Product编程

    2023-12-20 15:34:02       42 阅读
  6. Docker 如何删除所有没有名字的镜像

    2023-12-20 15:34:02       40 阅读
  7. vue3虚拟dom和diff算法实现(模仿源码)

    2023-12-20 15:34:02       34 阅读
  8. npm run build Last few GCs

    2023-12-20 15:34:02       42 阅读
  9. 华纳云:Ubuntu下LAMP环境如何配置

    2023-12-20 15:34:02       36 阅读