在二维数组中查找杨氏矩阵

    在一个二维数组中,每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数。
例如:
二维数组
1 2 3
4 5 6
7 8 9
查找数字7.
 
方法一:对整个数组进行便利,直到求出要找的数
#include<stdio.h>
#include<assert.h>
int main()
{
         int x = 0;
         int ret = 0;
         int binsearch(int *arr, int x);
         int str[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
         scanf("%d", &x);
         ret = binsearch(str, x);
         if (ret == 1)
         printf("ok\n");
         if (ret == 0)
         printf("no\n");
         system("pause");
         return 0;
}

int binsearch(int *arr, int x)       //*arr用于接收要被查找的数组首地址,x为要查找的数
{                                                
       assert(arr);
       while (*arr)
        {
           if (*arr == x)            //如果找到要查找的数就返回1
           return 1;
           else
           arr++;
       }
    return 0;                    //如果没有找到要查找的数就返回0
}
 
2.方法二: 
#include <stdio.h>
#define COLS 3      //宏定义了两个常量
#define ROWS 3
int find_num(int arr[COLS][ROWS], int key, int cols, int rows)
{
      if (cols > 0 && rows > 0)
         {
              int col = 0;
              int row = rows - 1;
             while ((col < cols) && (row >= 0))    
                 {
                   if (arr[col][row] < key)     //将arr[0][2]与key比较,如果arr[0][2]小于key,则col向下加一行
                     {                                          
                        col++;
                     }
            else if (arr[col][row] == key)       //如果arr[0][2]等于key,则返回1
                    {
                       return 1;
                    }
          else                                 //如果arr[0][2]大于key,则row向左减一行
                    {
                        row--;
                    }
                }
           return 0;
        }
 return -1;                             //如果找不到,则返回-1
}
int main()
{
      int arr[COLS][ROWS];   
      int i = 0;
      int j = 0;
      int key = 0;
     for (i = 0; i < COLS; i++)    //控制数组的行
      {
         for (j = 0; j < ROWS; j++)   //控制数组的列
         {
           arr[i][j] = i*ROWS + j;        //给数组每个元素赋值
         }
      }
     scanf("%d", &key);
     int ret = find_num(arr, key, COLS, ROWS);    //调用函数,将函数返回值用ret接收
     if (ret == 1)
      {
         printf("exist\n");
       }
    else
       {
          printf("not exist\n");
        }
  system("pause");
  return 0;
}


本文出自 “零点时光” 博客,请务必保留此出处http://10741764.blog.51cto.com/10731764/1716864

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值