• 二维数组中的查找


    题目

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

    问题分析

      

     应当从具体问题入手,通过分析简单具体的例子,发现普遍的规律。

      现在假定,我们要从二维数组

      1  7  14  21

      3  8  15  22

      5  9  16  23

      7  17 23 24

      中检索是否存在数字7。

      按照从右上方,列优先的顺序检索该数组。

      1. 在检索17的时候,因为21大于17,故可剔除第四列。

      2. 在检索14的时候,因为14小于17,故可剔除第一行,相当于更新行号和列号后重新执行而已。则剩下

                 3  8  15  

                 5  9  16  

                 7  17 23

         3. 在检索15的时候,因为15小于17,故可剔除第一行,只剩下

                   5  9  16  

                 7  17 23

         4. 在检索16的时候,因为16小于17,故可剔除第一行,只剩下

                   7  17 23

      5. 在检索到23的时候,因为23大于17,故可剔除第三列,只剩下

                     7   17

         6. 检索到17,返回。

    代码实现如下:

    #include <stdio.h>
    #define M 4
    #define N 4
    int FindNumber(int array[M][N],int rows,int columns,int number)
    {
        if(array!=NULL && rows>0 && columns>0)
            {
                int col=columns-1,row=0;
                while(col>=0 && row<rows)
                {
                    if(array[row][col]>number)
                       {
                          col--;
                          continue;
                       }
                    else if(array[row][col]<number)
                    {
                          row++;
                          continue;
                    }
                    else
                            return 1;
                }
                return 0;
    
            }
        else
                return 0;
    }
    
    
    int main(void)
    {
        int a[M][N]={
          {1,7,14,21},{3,8,15,22},{5,9,16,23},{7,17,23,24}
        };
        int num;
        printf("要测试的数组为:
    ");
        for(int i=0;i<M;i++)
        {
                for(int j=0;j<N;j++)
                {
                        printf("%d ",a[i][j]);
                }
                printf("
    ");
        }
        printf("请输入要查找的数:");
        while(scanf("%d",&num))
        {
               if(FindNumber(a,M,N,num))
                       printf("该数存在
    ");
               else
                       printf("该数不存在
    ");
               printf("请输入要查找的数:");
        }
    
        return 0;
    }

    结果如下:

    $ ./MyFindNumberInTwoArrays.exe
    要测试的数组为:
    1 7 14 21
    3 8 15 22
    5 9 16 23
    7 17 23 24
    请输入要查找的数:17
    该数存在
    请输入要查找的数:23
    该数存在
    请输入要查找的数:22
    该数存在
    请输入要查找的数:10
    该数不存在
    请输入要查找的数:6
    该数不存在
    请输入要查找的数:

     程序猿必读

  • 相关阅读:
    黑马程序员__OC三大特性
    黑马程序员___OC类和对象
    黑马程序员___预处理指令
    黑马程序员___数据类型总结
    黑马程序员__指针
    黑马程序员__C语言__函数__static和extern
    黑马程序员__C语言__流程控制__选择结构
    黑马程序员__C语言__循环结构
    入园随笔
    Fiddler中抓取不到Jmeter模拟的请求包。
  • 原文地址:https://www.cnblogs.com/longzhongren/p/4338946.html
Copyright © 2020-2023  润新知