在一个二维数组中,每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数。
例如:
二维数组
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
原文:http://10741764.blog.51cto.com/10731764/1716864