入门 对有序数组进行二分搜索 + 图解 (上篇)

1)有序数组 中确定 num 存在 还是 不存在

cpp 复制代码
bool exist(int num,int arr[],int len) {
	if (len == 0) return false;
	int left = 0, right = len - 1, mid = 0;
	while (left <= right) {
		mid = left + ((right - left) >> 2);
		if (arr[mid] == num) return true;
		else if (arr[mid] > num) right = mid - 1;
		else left = mid + 1;
	}
	return false;
}

2)有序数组 中找 >=num最左位置

cpp 复制代码
// 2)在有序数组中找 >= num的最左位置
int findLeft(int num,int arr[], int len) {
	int left = 0, right = len - 1, mid = 0;
	int ans = -1;
	while (left <= right) {
		mid = left + ((right - left) >> 1);
		if (arr[mid] >= num) {
			ans = mid;
			right = mid - 1;
		}
		else {
			left = mid + 1;
		}
	}
	return ans;
}

3)有序数组 中找 <=num最右位置

cpp 复制代码
// 3)在有序数组中找<=num的最右位置
int findRight(int num, int arr[], int len) {
	int left = 0, right = len - 1, mid = 0;
	int ans = -1;
	while (left <= right) {
		mid = left + ((right - left) >> 1);
		if (arr[mid] <= num) {
			ans = mid;
			left = mid + 1;
		}
		else {
			right = mid - 1;
		}
	}
	return ans;
}

二分搜索时间复杂度O(logn)

相关推荐
励志成为嵌入式工程师3 分钟前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉33 分钟前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer37 分钟前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq39 分钟前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
wheeldown1 小时前
【数据结构】选择排序
数据结构·算法·排序算法
青花瓷2 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
观音山保我别报错2 小时前
C语言扫雷小游戏
c语言·开发语言·算法
幺零九零零3 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
TangKenny3 小时前
计算网络信号
java·算法·华为
景鹤3 小时前
【算法】递归+深搜:814.二叉树剪枝
算法