蓝蓝算法day15/45

折半查找是一种在有序数组中进行目标值搜索的算法,其时间复杂度为O(logn),空间复杂度为O(1)。通过初始化左右指针并不断比较中间元素与目标值,逐步缩小搜索范围,直至找到目标值或确定不存在。当找不到目标值时,返回-1。
摘要由CSDN通过智能技术生成

 题⽬描述:
折半查找(默认有序表)的代码默写

知识点:
        1. 折半查找(BinarySearch)是⼀种在有序数组中快速查找⽬标值的算法。它的基本思想
是通过将⽬标值与数组的中间元素进⾏⽐较,从⽽将搜索范围缩⼩⼀半,然后重复这个过
程直到找到⽬标值或确定⽬标值不存在。
        2. 折半查找要求⽬标数组是有序的,否则⽆法使⽤该算法进⾏查找。


时间复杂度:O(logn),其中n是数组的⻓度。每次查找都将搜索范围缩⼩⼀半,所以最坏
情况下的查找次数为logn
空间复杂度:O(1),算法只使⽤了常数变量来保存辅助信息,没有使⽤额外的辅助空间。

思路
1. 初始化左右指针left和right,分别指向数组的起始位置和结束位置。
2. 重复以下步骤,直到left指针⼤于right指针的时候停⽌。
a. 将中间元素与⽬标值进⾏⽐较。
b. 如果中间元素等于⽬标值,表⽰找到了⽬标值,返回中间元素的索引。
c. 如果中间元素⼤于⽬标值,则标指⽬标值可能在该中间元素的左侧,更新右指针为mid-1。
d. 如果中间元素⼩于⽬标值,则标指⽬标值可能在该中间元素的右侧,更新左指针为mid+1。
3. 循环结束仍然没有找到⽬标值,则表⽰⽬标值不存在于数组中。

int binarySearch(int arr[], int length, int target) {
//定义左、右指针 
int left = 0;
int right = length - 1;
	while (left <= right) {
		int mid; 
		mid = (left + right) / 2; //mid来保存中间元素值的下标
		 
		if(arr[mid] == target) {
			return mid;
		}else if (arr[mid] < target) {// 可能在左侧 
			left = mid + 1;
		}else {
			right = mid -1;
		}
	}
	return -1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值