二维数组中的查找

原创 2015年11月20日 22:10:55

题目

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

例如下面的二维数组就是每行、每列都增序排序。如果在这个数组中查找数字13,则返回true;如果查找数字15,由于数组不含有该数字,则返回false。

    1   2   7   10
    5   8   9   11
    7   13  14  17
   20   25  27  30

分析

图a
假设要查找的数字数字是13,首先我们选取数组的右上角的数字10。由于13大于10,根据题目要求数组每一行都是从左到右递增的顺序排序,所以10是第一行最大的数,因此第一行不存在比13还大的数字。于是把这一行从需要考虑的区域内剔除,之后只需分析剩下来的3行(即图中的红色圈的区域)。

图b
在剩下的3行中,右上角的数字为11。同样11小于13,因此11所在的行应该剔除,之后剩下只需分析两行(即图中的红色圈的区域)。

图c
在剩下的2行中,右上角的数字为17。17大于13,根据题目要求数组的每一列都是从上到下递增顺序排列,所以17是第四列最小的数,因此第四列不存在比13还小的数字。于是把这一列剔除,之后剩下只需分析2行3列(即图中红色圈的区域)。

图d
在剩下的数字中,右上角的数字为14,14大于13,同理14所在列应该剔除,之后剩下2行2列(即图中红色圈的区域)。

代码

#include<stdio.h>

/** 
 *matrix 输入二维数组的地址
 rows    二维数组的行数 
 columns 二维数组的列数
 number  要查找的数
 **/
bool find(int *matrix, int rows, int columns, int number) {
    bool result = false;

    //rows = 行,column = 列
    //检测函数的入口参数是否合法 
    if(matrix != NULL && columns >0 && rows > 0) {

        //定位右上角的数组元素
        int rowtemp = 0;
        int columntemp = columns - 1;

        //当查找是的行数小于总的行数和查找的列数大于等0,则在循环查找,直到查找到为止。
        while(rowtemp < rows && columntemp >= 0  ) {

            //如果右上角的数大于查找的数,剔除右上角的数所在列
            if( matrix[rowtemp * columns + columntemp] > number) {

                printf("  >  -->  %d\n", matrix[rowtemp * columns + columntemp]);
                columntemp--;

            //如果右上角的数小于查找的数,剔除右上角的数所在的行
            } else if ( matrix[rowtemp * columns + columntemp] < number) {

                printf("  <  -->  %d\n", matrix[rowtemp * columns + columntemp]);
                rowtemp++;

            //如果右上角的数等于查找的数
            } else if ( matrix[rowtemp * columns + columntemp] == number) {

                printf("  ==  -->  %d\n", matrix[rowtemp * columns + columntemp]);
                result = true;
                //如果找到则退出while循环
                break;
            }

        }


    }
    return result;

}

void  main() {

    int a[4][4] = { {1,2,7,10},{5,8,9,11},{7,13,14,17},{20,25,27,30}};  

    printf("find result =  %d\n",find(&a[0][0],4,4,13));

}

截图

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

二维数组中查找值

二维数组中查找值题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 publi...
  • sinat_26533265
  • sinat_26533265
  • 2016年05月09日 22:18
  • 393

二维数组中的查找 C++

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 代码:class Solu...
  • noc_lemontree
  • noc_lemontree
  • 2016年07月11日 16:31
  • 617

在二维数组中查找元素

在二维数组中查找元素
  • StoryMonster
  • StoryMonster
  • 2016年10月05日 16:58
  • 1613

在二维数组中查找一个数

题目:在一个二维数组中,每一行都按照从左到右递增的顺序,每一列都按照从上到下递增的顺序排序,编写一个函数,输入这样的一个二维数组和一个整数。判断该整数是否在二位数组中。 思路...
  • yangrujing
  • yangrujing
  • 2016年05月06日 17:03
  • 1168

二维数组中的查找(C语言)

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

二维有序数组的查找 python解决

一点一点的进步         题目是 在:https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e? tpId=13&t...
  • XiaoXIANGZI222
  • XiaoXIANGZI222
  • 2017年02月16日 00:23
  • 668

面试题解:二维数组中的查找(C 语言版)

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入: 输...
  • fduan
  • fduan
  • 2012年08月19日 21:55
  • 1421

在二维数组中查找一个指定的数值

最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下。 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到...
  • shallynever
  • shallynever
  • 2016年07月30日 14:06
  • 1293

从二维数组中查找某个元素

题目:有一个二维数组,二维数组的每一行从左到右数据递增,二维数组的每一列,从上到下递增。在这样的二维数组中查找指定元素,返回其下标。 思路:首先将待查找的元素q与二维数组的右上方的元素e进行...
  • xiaoyi357
  • xiaoyi357
  • 2017年04月08日 18:53
  • 874

java实现在二维数组中查找一个数

在二维数组中查找7在一个二维数组中,每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 public...
  • pomay
  • pomay
  • 2017年03月23日 11:56
  • 956
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二维数组中的查找
举报原因:
原因补充:

(最多只允许输入30个字)