简单是王道《计划中的书》
2009-03-30 13:47
253 查看
二维数组中的查找,杨氏矩阵
题目:在一个二维数组中,每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数。
例如:二维数组
1 2 3
4 5 6
7 8 9
查找数字7.
注意:此题不是简单的便利整个数组进行查找,此法效率较低,根据杨氏矩阵的特点(每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序)进行不断缩小查找范围的形式进行查找。代码如下:
题目:在一个二维数组中,每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数。
例如:二维数组
1 2 3
4 5 6
7 8 9
查找数字7.
注意:此题不是简单的便利整个数组进行查找,此法效率较低,根据杨氏矩阵的特点(每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序)进行不断缩小查找范围的形式进行查找。代码如下:
#include<stdio.h> #include<stdlib.h> #define LINE 3 #define LIST 3 void bulid(int str[LINE][LIST],int find) { int i,j; for(i=0;i<LINE;i++) { for(j=0;j<LIST;j++) { str[i][j]=str[0][0]+LIST*i+j; } } } int search(int str[LINE][LIST],int find) { if(LINE>0&&LIST>0)//判断行和列是否合法 { int col=0; int row=LIST-1;//由于杨氏矩阵的特点,定义变量col,row从第一行最后一个元素开始进行比较,从而缩小范围提高效率 while(row>=0&&col<LINE) { if(find<str[col][row]) row--;//如果find小于每行最后一个数,则次数在此行左边 else if(find>str[col][row]) col++;//如果find大于每行最后一个数,则次数在此行下一行 else return 1;//str[col][row]等于find,即找到次数 }return 0; }return -1; } int main() { int str[LINE][LIST]={0}; int i,j,find,num,var; printf("请输入二维数组第一个值和需要查找的数字>\n"); scanf("%d%d",&num,&find); str[0][0]=num; bulid(str,find); var=search(str,find); if(var==1) printf("exist %d\n",find); else printf("not exist %d\n",find); system("pause"); return 0; }本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1710669
相关文章推荐
- hdu - 2102 A计划 (简单bfs)
- 利用windows计划任务和chrome浏览器自动签到赚金币的简单实现办法
- Sql Server之旅——第十一站 简单说说sqlserver的执行计划
- HDU 2102 A计划(简单3维BFS)
- Sql Server之旅——第十一站 简单说说sqlserver的执行计划
- 天气预报执行计划及完成程度+简单而又不简单获取当前时间和解析农历时间的纯JAVA代码
- 截断并收缩事务日志,并且建立包含完全备份和事务日志备份的简单维护计划
- 简单是王道《四、编程模型》
- 简单超级组计划 打造强悍手臂
- 算法题:简单的邮递计划 - 递归
- windows任务计划和批处理脚本结合完成的一些简单功能
- 简单是王道《八、建立外科手术式团队》
- java简单学习计划
- 简单的创建SQL 2005计划任务应用
- AutoTRACE是分析SQL的执行计划,执行效率的一个非常简单方便的工具
- 用Mindmaster思维导图做计划就是这么简单!
- linux下rman简单的备份策略及计划任务
- 做产品的王道:用一个简单的点改变世界
- iOS开发者计划简单介绍