二维数组中的查找
来源:互联网 发布:js修改css样式 编辑:程序博客网 时间:2024/06/07 01:30
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。现在我们要做一件事情:输入这样一个二维数组和一个整数,判断数组中是否含有该整数。
因为该数组从左到右递增、从上到下递增,所以我们可以在数组中选择一个基准与要找的数进行比较大小,如果基准与其相等,则找到;如果基准比其大,则在基准的上方或者左方查找;如果基准比其小,则在基准的下方或者右方进行查找。
如下:选择基准为4,找7;由于7>4我们确定下次找的范围为4的右方和下方,深紫色是重复的。
但是这样的查找给我们带来了不便,因为每次比较完之后,下次要查找的区域有重叠,而且没有规律。
所以我们换一种思路,开始选取右上角或者左下角的数作为基准进行比较,这样的话,借助数组中从左到右递增、从上到下递增,就可以一步一步进行剔除基准所在行或者列。
这里需要注意一下,不能选择左上方或者右下角的数做为基准,因为左上角的数比数组中任意位置的数小,无法做选择;右下角的数比数组中的任意位置的数都大,无法做选择。
1)、每次以右上角的数作为基准
2)、每次以左下角的数左为基准
代码:
#include<stdio.h>bool Find2(int *matrix,int rows,int columns,int number)//选取左下边的数字进行比较{bool found=false;if(matrix!=NULL && rows>0 && columns>0){int row=rows-1;int column=0;while(row>=0 && column<columns){if(matrix[row * columns+column]==number){found=true;break;}else if(matrix[row*columns+column]>number){--row;}else{++column;}}}return found;}bool Find1(int *matrix,int rows,int columns,int number)//选取右上角的数字进行比较{bool found=false;if(matrix!=NULL && rows>0 && columns>0){int row=0;int column=columns-1;while(row<rows && column>=0){if(matrix[row * columns+column]==number){found=true;break;}else if(matrix[row*columns+column]>number){--column;}else{++row;}}}return found;}int main(){int arr[]={1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15}; if(Find2(arr,4,4,15))printf("该数组中有\n");elseprintf("没有\n");if(Find2(arr,4,4,1))printf("该数组中有\n");elseprintf("没有\n");if(Find2(arr,4,4,7))printf("该数组中有\n");elseprintf("没有\n");if(Find2(arr,4,4,20))printf("该数组中有\n");elseprintf("没有\n");if(Find2(arr,4,4,-2))printf("该数组中有\n");elseprintf("没有\n");if(Find2(arr,4,4,5))printf("该数组中有\n");elseprintf("没有\n");if(Find2(arr,4,4,NULL))printf("该数组中有\n");elseprintf("没有\n");return 0;}
阅读全文
0 0
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- execute immediate v_sql用法
- [LeetCode] 33. Search in Rotated Sorted Array
- JS基础
- 20171125 变量类型的大小
- PAT 1074
- 二维数组中的查找
- 第十五章作业
- 浅谈C语言中如何取随机数
- manacher算法及其应用
- 自然、接纳、内观、为所当为
- 输入输出流
- 循环队列与链式队列的实现
- jQuery---强大的选择器
- 发送ajax请求