数组-----二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

方法一:从右上角的数开始查找,若该数字大于查找的数,则该列减一;若该数字小于查找的数字,则该行减一;若两数相等,则结束查找。

#include <cstdio>

bool Find(int *matrix, int rows, int columns, int number)
{
	int Found = false;
	int row = 0;
	int column = columns - 1;
	if (matrix != nullptr && rows > 0 && columns > 0)
	{
		while (row < rows&&column >= 0)
		{
			if (matrix[row*columns + column] == number)
			{
				Found = true;
				break;
			}
			else if (matrix[row*columns + column] > number)
				--column;
			else
				++row;
		}
	}
	return Found;
}
//测试用例
//查找的数在数组
void Test1()
{
	int matrix[][4] = { {1,2,8,9,},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	if (Find(*matrix, 4, 4, 7))
		printf("Find it!\n");
	else
		printf("Fail!\n");
}
//查找的数不在数组
void Test2()
{
	int matrix[][4] = { {1,2,8,9,},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	if (Find(*matrix, 4, 4, 3))
		printf("Find it!\n");
	else
		printf("Fail!\n");
}
//输入空指针
void Test3()
{
	int matrix[][4] = { {1,2,8,9,},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	if (Find(nullptr, 4, 4, 7))
		printf("Find it!\n");
	else
		printf("Fail!\n");
}


int main()
{
	Test1();
	Test2();
	Test3();
	return 0;
}

方法二:从左下角开始,原理和方法一同。

#include <cstdio>

bool Find(int *matrix, int rows, int columns, int number)
{
	int Found = false;
	int row = rows - 1;
	int column = 0;
	if (matrix != nullptr && rows > 0 && columns > 0)
	{
		while (row < rows&&column >= 0)
		{
			if (matrix[row*columns + column] == number)
			{
				Found = true;
				break;
			}
			else if (matrix[row*columns + column] < number)
				++column;
			else
				--row;
		}
	}
	return Found;
}
//测试用例
//查找的数在数组
void Test1()
{
	int matrix[][4] = { {1,2,8,9,},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	if (Find(*matrix, 4, 4, 7))
		printf("Find it!\n");
	else
		printf("Fail!\n");
}
//查找的数不在数组
void Test2()
{
	int matrix[][4] = { {1,2,8,9,},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	if (Find(*matrix, 4, 4, 3))
		printf("Find it!\n");
	else
		printf("Fail!\n");
}
//输入空指针
void Test3()
{
	int matrix[][4] = { {1,2,8,9,},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
	if (Find(nullptr, 4, 4, 7))
		printf("Find it!\n");
	else
		printf("Fail!\n");
}


int main()
{
	Test1();
	Test2();
	Test3();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39916039/article/details/82107683