题目描述

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

思考:在这个二维数组的每一行中,最左边的数字是最小的,在每一列中,最上面的数字是最小的;那么,我们可以找到一个中间值(即第一行的最右边元素,也是最后一列的第一个元素);让这个中间值和整数比较,若中间值小于该整数,则说明这一行的值都小于该整数(即可以排除该行),若中间值大于该整数,则说明该列的所有元素都大于该整数(即可以排除该列)。

排除一行或一列后,重新找到这个中间值(剩余数组的右上角的值),继续上述比较规则,知道最后剩1个元素,如果该元素于这个整数不相等,则终止循环,返回false;否则,终止循环,返回true。

代码实现(C语言)

1、首先定义自己的 myUtil.h 文件。

#ifndef _MY_UTIL_H_
#define _MY_UTIL_H_
/*
自定义myUtil.h文件
文件中  定义了Boolean类型定义了TRUE和FALSE*/
typedef unsigned char boolean;
#define FALSE '0'
#define TRUE '1'#endif

2、编写测试  test.c  文件。

#include <stdio.h>#include "myUtil.h"boolean FindNum(char **array, int rows, int columns, int num);boolean FindNum(char **array, int rows, int columns, int num) {boolean result = FALSE;int row;int col;int i = 0;int j = 0;int tag = 0;//tag标记,在方法中输出二维数组时所需要的标记if(array == NULL || rows < 0 || columns < 0) {printf("数组输入有误……\n");return result;}row = 0;col = columns - 1;// printf("使用传递过来的二维数组参数输出二维数组\n");// for(i = 0; i < rows*columns; i++) {//     printf("%d,", array[i]);//    if(tag == columns-1) {//      tag = 0;//         printf("\n");//   } else {//      tag++;//  }// }printf("要查找的数字:%d\n", num);while(row < rows && col >= 0) {//printf("%d\n", col);if(array[row*col + col] == num) {result = TRUE;break;}if(array[row*col + col] > num) {col--;} else {row++;}}return result;
}int main(int argc, char const *argv[])
{/* code */int i;int j;boolean result;int array[5][5] = {  {1,2,8,9,11},{2,4,9,12,13},{4,7,10,13,15},{6,8,11,15,18},{10,12,14,18,22},};int num = 0; printf("请输入一个整数num:\n");scanf("%d", &num);result = FindNum(array, 5, 5, num);printf("结果为【%s】\n", result == '0' ? "数组中不存在此元素" : "数组中存在此元素");return 0;
}

3、测试结果

二维数组中的查找(C语言实现)相关推荐

  1. c语言统计二维数组中数字出现次数,C语言二维数组中的查找的实例

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

  2. 二维数组中的查找(杨氏矩阵(C语言+Java))

    二维数组中的查找这道题,出自 <剑指Offer>.也是著名的杨氏矩阵 在一个 n *m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的.输入一个数,判断矩阵中 ...

  3. c语言二维数组中的周边,【C语言】二维数组中的查找,杨氏矩阵

    //二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...

  4. python 二维数组长度_剑指offer二维数组中的查找【Java+Python】

    点击上方"蓝字",关注了解更多 二维数组中的查找 1. 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序 ...

  5. 剑指offer:面试题04. 二维数组中的查找

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

  6. php查找二维数组下标,PHP实现二维数组中的查找算法小结

    本文实例讲述了PHP实现二维数组中的查找算法.分享给大家供大家参考,具体如下: 方法1:silu从左下角最后一行的第一个元素开始,遍历.如果小于target 则遍历该行的所有元素,找到结束.如果大于继 ...

  7. [剑指Offer]5.二维数组中的查找

    题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...

  8. 剑指Offer面试题:2.二维数组中的查找

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

  9. 算法题001 剑指Offer 面试题三:二维数组中的查找

    剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...

  10. LeetCode-剑指 Offer 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 思路一:暴力解法,两层for循环查找 时间复杂度为:O(nm) 空间复杂度为:O(1) class Solution {public:bool findNu ...

最新文章

  1. 算法设计思想(4)— 分治法
  2. c语言第1章以下说法错误的是,计算机等级考试c语言程序设计习题
  3. python爬取b站排行榜_实时爬取B站排行榜并保存为表格——每周一个爬虫小教程系列...
  4. 中高级PHP程序员应该掌握哪些技术
  5. linux 命令之df持续更新中~
  6. sharepoint 2010 在线打开office时报错
  7. altium designer 常用元件封装
  8. Windows10重新安装软件商店
  9. 2020年中华人民共和国行政区划代码
  10. 3DS MAX 基础知识 材质编辑器
  11. 国美易卡取得长足发展,国美易卡NVIDIA深度学习
  12. Chapter 5 Eigenvalues and Eigenvectors
  13. 如何在Mac上安全彻底的卸载软件?
  14. Simulated Binary Crossover(SBX)的学习
  15. 中国移动研究院人工智能中心前端面试题目整理
  16. 无法打开chm格式文件解决方法
  17. 世界疫情实时动态 + pyecharts可视化
  18. NOI / 1.10编程基础之简单排序 02:奇数单增序列
  19. 虚拟机性能监控、故障处理工具
  20. RPMS系统(4S汽车维修管理系统)

热门文章

  1. 漫画 | 最让程序员抓狂的7件事
  2. windows 安装 Elasticsearch
  3. 瑞吉外卖项目学习笔记-P25-项目优化-读写分离
  4. 【系统之家首发】11月最新系统GHOSTXP_SP3电脑公司快速装机版V2011.11
  5. 根据属地id选择子属地
  6. 《如何管理软件企业》
  7. 蒙特卡罗树搜索之初学者指南
  8. 常见的风险欺诈方式(仅供参考,未完待续)
  9. 数学之美--分形几何与建筑形式美
  10. emacs ido mode