杨氏矩阵简化版-c语言

题目:杨氏矩阵:有一个数字矩阵,矩阵的每行从左到右递增,从上到下递增。

要求:请编写程序在这样的矩阵中查找具体某个数字是否存在.(时间复杂度小于 O(N);

思路:

#include<stdio.h>
void find_k(int arr[][3], int k, int* px, int* py)
{
	int x = 0;//行
	int y = *py - 1;//列  第一行右上角元素坐标(x,y)

	while (x < px && y >= 0)
	{
		//查找一次
		if (arr[x][y] < k)
		{
			x++;//下移
		}
		else if (arr[x][y] > k)
		{
			y--;//左移
		}
		else 
		{
			//找到了的情况
			*px = x;
			*py = y;
			return;
		}
	}
	//找不到的情况
	*px = -1;
	*py = -1;
}

int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };

	int k = 7;//假设查找数字7

	int x = 3;//横坐标
	int y = 3;//纵坐标

	find_k(arr, k, &x, &y);

	if (x == -1 && y == -1)
	{
		printf("找不到该数字\n");
	}
	else
	{
		printf("找到了该数字,下标是%d %d", x, y);
	}

	return 0;
}

注:这里为了追求高内聚,低耦合,函数横纵坐标参数设计为返回型参数,使得参数既可以作为输入,也可以作为输出。

猜你喜欢

转载自blog.csdn.net/m0_73969113/article/details/130675431