二维数组作为参数传递

二维数组题的思维收获

这个算法跟数据结构没关系,主要是逻辑思维看图思考利用的是数据之间的关系;多多举例具体化尝试,把复杂的问题具体化,分析那种情况,时间复杂度低。先有思路,再写代码。代码贴近自己的思维。

二维数组处理的代码收获

在c++中将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维。但是我们在写程序的时候经常会遇到各个维数都不固定的情况,我们完全可以不把它当作一个二维数组,而是把它当作一个普通的指针,在另外加上两个参数指明各个维数,然后我们为二维数组手工寻址,这样就达到了将二维数组作为参数传递的目的

#include <iostream>
using namespace std;
//int * matrix 与 int matrix[][]在传递参数时候的区别; 
//有时候递归反而把简单问题复杂了; 
//有时候我们写代码定义变量的时候要贴近思维,也要注意代码速度;
 

int Find(int * matrix,int rows,int columns,int number)
{
    int row = 0, column = columns - 1;
    while(column>=0 && row<rows)
    {
        if(*(matrix+row*columns+column) == number )
        {
            cout<<*(matrix+row*columns+column)<<"找到" <<endl;
            return 1;
        }
        if(*(matrix+row*columns+column) < number ) //除了有return外  一定要注意if else 的匹配 
        {
            cout<<*(matrix+row*columns+column)<<"小了" <<endl;
            row++; 
        }else
        {
            cout<<*(matrix+row*columns+column)<<"大了" <<endl;
            column--; 
        }    
        
    }
    return 0;
    
}
int main()
{
    int  data[4][4]=
    {
        1, 2,  8,  9,
        2, 4,  9, 12,
        4, 7, 10, 13,
        6, 8, 11, 15
    };
    int num[4][5]
    {
        1, 2, 8, 9, 10,
        2, 4, 9, 12, 13,
        4, 7, 10, 13, 14,
        6, 8, 11, 15, 16
    };
    cout<<Find(&(data[0][0]),4,4,0)<<endl;
    cout<<Find(&(num[0][0]),4,5,17)<<endl;
}

 

posted @ 2015-03-12 23:53  在河之博  阅读(438)  评论(0编辑  收藏  举报