二维数组中的查找 之 二分法

本文介绍如何在一个二维数组中进行查找,数组的每一行和每一列都是递增排序。通过二分法策略,寻找对角线元素进行比较,优化查找效率。在给定的代码实现中,详细解释了如何处理不同大小的矩阵,以及在找不到目标值时进行左下角和右上角矩阵的递归查找。
摘要由CSDN通过智能技术生成
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;
如果查找数字5,由于数组不含有该数字,则返回false。
 
我的解题思路是这样的矩阵行列都是从小到大排好序的,要查找的话自然用二分效率比较高,
而且这样的矩阵有个性质,最左上角的元素必定是最小值,最右下角的是最大值,在一个
n*n的矩阵中,对角线的元素也是排好序的,找到对角线上的一个元素,使得这个元素小于
待查找的key,并且下一元素大于待查找的key,那么只要在这个元素的左下角矩阵和右上角
在一维数组实现二分查找算法通常需要以下步骤: 1. **准备工作**:首先,你需要确保数组已经排序(二分查找前提是数组有序)。数组元素从左到右递增或递减。 2. **定义函数**:创建一个名为`binary_search`的函数,它接受两个参数:指向数组的指针`arr`,和一个包含查找范围(起始索引`low`和结束索引`high`)的元组。 ```c int binary_search(int arr[], int low, int high, int target); ``` 3. **检查边界条件**:在开始循环之前,检查`low`是否小于等于`high`。如果不是,说明目标不在数组内,返回-1表示未找到。 4. **间点计算**:找到数组的间索引,通常是`(low + high) / 2`,存储在变量`mid`。 5. **比较间元素**:如果数组的间元素等于目标值`target`,那么搜索结束,返回`mid`作为结果。如果间元素大于目标,就在数组的左半部分(即`low`到`mid - 1`)继续搜索;如果小于目标,就在右半部分(即`mid + 1`到`high`)搜索。 6. **递归调用**:不断重复步骤3到5,直到找到目标或确定目标不存在为止。 7. **返回结果**:当搜索范围内找不到目标或者搜索范围变成单个元素时(即`low == high`),返回-1表示未找到。 这个算法的工作原理基于二分法的思想,每次将待查找区间缩小一半,因此效率比线性查找高很多,尤其是在大型数组。当元素分布均匀时,平均时间复杂度为O(log n)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值