在行列递增的二维数组查找数据n

该博客讨论了如何在行列递增的二维数组中高效查找数据。原有的从右上角开始的方法在数据量大时效率低下。作者提出了结合折半查找的优化方案,以提高搜索效率。
摘要由CSDN通过智能技术生成

剑指offer上这道题的方法是从二维数组的右上方元素 m 开始查找,若m > n,则 则向下查找;若 m < n,则向左查找。思路挺简单的,但是如果数据量很大,则查找起来就很鸡肋~~~,如下:

char Find(int *arr,int rows,int cols,int n)
{
	int found = -1;
	if(arr == NULL || rows < 0 || cols < 0)
		return 0;
	else
	{
		int row = 0;
		int col = cols - 1;//从矩阵的右上角开始
		while(row < rows && col >= 0)
		{
			if(arr[row*cols + col] == n)
			{
				found = 1;
				break;
			}
			else if(arr[row*cols + col] > n)//向左走
				col--;
			else                         //向下走
				row++;
		}
	}
	return found;
}

那如果这样,我们可以从任意一个角开始~~~~

既然数据行 列有序,查找的最好办法就是结合 折半查找,毕竟,折半查找真的是一个很优秀的算法啊

int BinSearch(int *arr,int len,int key)
{
	int i = 0;
	int j = len-1;

	int mid;
	while(i < j)
	{
		mid = (i+j)/2;
		if(arr[mid] == key) return mid;
		else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值