【数据结构】为什么说二分查找是很牛的算法?

为什么说二分查找是很牛的算法?



一、二分查找是什么?

在学习数据结构的过程中我们会学很多数据结构,例如:二叉树、AVLTree、哈希表、B数,而今天我要给大家介绍在有序的情况下的一种排序——二分查找,接下来请看代码实现。

代码如下(示例):

int BinarySearch(int arr[], int k, int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}
	if (left > right)
	{
		return -1;
	}

}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int k = 0;
	scanf("%d", &k);
	int ret = BinarySearch(arr, k, sz);
	if (ret == -1)
	{
		printf("没找到\n");
	}
	else
	{
		printf("找到了,下标是%d\n", ret);
	}
}

输出结果:在这里插入图片描述
在这里插入图片描述


二、为什么说二分查找是很牛的算法

原因 如下(示例):

 我们从时间复杂度的角度来看二分查找

很多看说这个二分查找的时间复杂度是O(N),这是错误的
最好:O(1),最坏:O(log2^n)那么我们是怎么算的呢?
在这里插入图片描述

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

在这里插入图片描述


可能大家光看时间复杂度说明不了什么,可以参考一下下面的表格:
在这里插入图片描述


二分查找的优缺点

既然二分查找的效率这么快,我们为什么不只用二分查找呢?还要使用哈希表、二叉树呢?
二分查找的缺点:所查找的数组必须是有序的!!!
那么我们有没有不需要有序并且时间复杂度也是log2^N:AVLTree、RBTree(后期会详细介绍)


总结

以上就是今天要讲的内容,本文介绍了二分查找的使用和优缺点,已经为什么说二分查找是很牛的算法?
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值