杨氏矩阵的查找【二维数组中数据的查找】
2015-05-19 14:38
281 查看
什么是杨氏矩阵就不再赘述,自己网查。
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <errno.h>
int find(int *arr, int rows, int cols, int num,int *rrow,int *rcol)
{
//rows 行
//cols 列
int row = 0;
int col = cols - 1;
int ret = 0;
if (arr != NULL&& rows > 0 && cols > 0)
{
while (row < rows && col >= 0)
{
if (num == arr[row * cols + col])//找到
{
ret = 1;
*rrow = row;
*rcol = col;
break;
}
else if (num < arr[row * cols + col])//去掉右边的列
{
col--;
}
else
{
row++;//去掉上边的行
}
}
}
return ret;
}
int main()
{
int ret = -1;
int col=-1, row=-1;
int arr[][3] = { { 1, 2, 3 }, { 3, 4, 5 }, { 6, 7, 8 } };
ret = find(&arr[0][0], 3, 3, 8,&row,&col);
printf("find = %d,row = %d,col = %d\n", ret,row,col);
ret = find(&arr[0][0], 3, 3, 1, &row, &col);
printf("find = %d,row = %d,col = %d\n", ret, row, col);
ret = find(&arr[0][0], 3, 3, 5, &row, &col);
printf("find = %d,row = %d,col = %d\n", ret, row, col);
ret = find(&arr[0][0], 3, 3, 10, &row, &col);
printf("find = %d,row = %d,col = %d\n", ret, row, col);
getchar();
return 0;
}环境VS2013.
测试结果:
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <errno.h>
int find(int *arr, int rows, int cols, int num,int *rrow,int *rcol)
{
//rows 行
//cols 列
int row = 0;
int col = cols - 1;
int ret = 0;
if (arr != NULL&& rows > 0 && cols > 0)
{
while (row < rows && col >= 0)
{
if (num == arr[row * cols + col])//找到
{
ret = 1;
*rrow = row;
*rcol = col;
break;
}
else if (num < arr[row * cols + col])//去掉右边的列
{
col--;
}
else
{
row++;//去掉上边的行
}
}
}
return ret;
}
int main()
{
int ret = -1;
int col=-1, row=-1;
int arr[][3] = { { 1, 2, 3 }, { 3, 4, 5 }, { 6, 7, 8 } };
ret = find(&arr[0][0], 3, 3, 8,&row,&col);
printf("find = %d,row = %d,col = %d\n", ret,row,col);
ret = find(&arr[0][0], 3, 3, 1, &row, &col);
printf("find = %d,row = %d,col = %d\n", ret, row, col);
ret = find(&arr[0][0], 3, 3, 5, &row, &col);
printf("find = %d,row = %d,col = %d\n", ret, row, col);
ret = find(&arr[0][0], 3, 3, 10, &row, &col);
printf("find = %d,row = %d,col = %d\n", ret, row, col);
getchar();
return 0;
}环境VS2013.
测试结果:
相关文章推荐
- 二维数组中的查找—杨氏矩阵
- #数据结构与算法学习笔记#剑指Offer1.5:二维数组中的查找(C++)
- 二维数组中的查找,杨氏矩阵
- 查找数据是否存在于二维数组中
- 查找----二维数组的查找之杨氏矩阵
- 《剑指offer》面试题3 二维数组中的查找(杨氏矩阵)
- 算法 杨氏矩阵搜索(二维数组中的查找)
- 杨氏矩阵的查找(二维数组中的查找——剑指offer3)
- 查找----二维数组的查找之杨氏矩阵
- [置顶] 【C语言】 二维数组中查找,杨氏矩阵
- 在二维数组中查找杨氏矩阵
- 【C语言】【面试题】【笔试题】二维数组中的查找,杨氏矩阵
- 《剑指offer》--004--二维数组中的查找(杨氏矩阵)
- 二维数组中的查找,杨氏矩阵
- 【C语言】 二维数组中查找,杨氏矩阵
- 剑指offer 2.3 数据结构2-二维数组中的查找
- 二维数组中查找数据(该数组每行从左至右递增,每列从上至下递增)
- 二维数组中的查找—杨氏矩阵
- 程序员面试题目总结--数组(五)【数组的后面m个数移动为前面m个数、列的前n项数据、判断整数x是否可以表示成n个连续正整数的和、数组中出现奇数次的元素、二维数组中的查找】
- 有一个二维数组.----杨氏矩阵 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);