zoukankan      html  css  js  c++  java
  • 二维数组的查找

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

    算法思路:

    1.拿数组中最右边的数和要找的数进行比较,如果右边数较大,可以不考虑最右边的一列,如果右边数较小,可以不考虑最上边的一行

    2.因为二维数组可以看做是几个一维数组,并且这几个一维数组在内存中的存放都是连续的,所以参数可以设置为一个一维数组(int *或int [])

    代码如下:

    #include<iostream>
    using namespace std;
    bool find(int *data,int rows,int columns,int key)//int *data将二维数组转化为一维数组,指向二维数组第一个数的地址
    {
        bool result=false;
        if(data!=NULL&&rows>0&&columns>0)//判断参数是否合法
        {
            int row=0,column=columns-1;//从最右边开始比较
            while(row<rows&&column>=0)
            {
                if(data[row*columns+column]==key)//找到
                {
                    result=true;
                    break;
                }
                else if(data[row*columns+column]>key)//要查找的值小于最右边的数,除去最右边的列
                {
                    column--;
                }
                else//要查找的值大于最右边的数,除去最上边的一行
                    row++;
            }
        }
        return result;
    }
    int main()
    {
        int a[4][4]={1,2,8,9,2,4,8,12,4,7,10,13,6,8,11,15};
        //int (*p)[4]=a;
        cout<<find(*a,4,4,7)<<endl;//a[4][4]是一个二维数组,而a代表指向第一个分数组的指针,基类字节为4(int所占字节数)*4(分数组中元素的个数)=16个字节,因此不能赋值给int *(4个字节),而*a,a[0],&a[0][0]都代表二维数组第一个数的地址(4个字节)
        return 0;
    }
  • 相关阅读:
    时间复杂度和空间复杂度的故事
    Go -- 并发编程的两种限速方法
    Go -- type 和断言 interface{}转换
    Go -- 实现二叉搜索树
    Go语言程序的状态监控
    Go -- 中开启gctrace
    Go --- GC优化经验
    Mysql 性能优化20个原则(4)
    Mysql 性能优化20个原则(3)
    查看 activex 组件的方法
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4470891.html
Copyright © 2011-2022 走看看