杨氏矩阵中查找元素
1. 算法分析
杨氏矩阵是一个很特殊的矩阵,它的横行和竖行的元素都是递增的,这样的性质就给它的查找带来了一些好处,可以很快的查找到一个数据,时间复杂度只有O(n).但是要如何查找呢?
第一步就是要确定一个参考数,这个数字一定具有很特殊的性质,这个数字就是第一列的最后一个元素。这个数字比第一列所有的元素大,比最后一行的所有元素都小
第二步,将需要查找的元素和已经确定的元素进行比较,如果比它小就给上走,如果比它大就给右走,这样经过多次循环,就可以知道是否存在想要的数字了。
2.算法实现代码
#include<stdio.h>
#define ROW 3 //定义行和列
#define COL 3
int Find(int a[ROW][COL], int x)
{
int i=0; //初始化i和j
int j=COL-1;
while(1)
{
int temp=a[i][j]; //找到了返回1
if(temp=x)
return 1;
else if(temp>x && j>=0)//比x大,给上走
temp=a[i--][j];
else if(temp<x && j>=0)//比x小,给右走
temp=a[i][j++];
else
return 0; //没找到,返回0**重点内容**
}
}
int main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
printf("请输入要查找的数:");
int x=0;
scanf("%d",&x);
if(Find(a,x))
{
printf("找到了\n");
}
else
{
printf("没找到\n");
}
return 0;
}