二维数组的线性搜索、二分搜索
1.二维数组的线性搜索:
代码如下:
#include<stdio.h>
void main()
{
int a[100][100],i,j,m,n,search;
printf("enter m:");
scanf("%d",&m);//输入数组最大行数
printf("enter n:");
scanf("%d",&n);//输入数组最大列数
printf("enter %d elements:\n",m*n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);//输入数组存储元素
}
}
printf("enter search:");
scanf("%d",&search);//输入需查找的数组元素
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]==search)//判断查找元素与数组元素是否相等
{
printf("%d 是数组中第%d个元素\n",search,j+i*n+1);
break;//跳出内层循环
}
}
if(a[i][j]==search)//判断查找元素与数组元素是否相等
{
break;//跳出外层循环
}
}
if(i==m&&j==n)//判断是否搜索到查找的数组元素
{
printf("%d 不是数组中的元素\n",search);
}
}
运行结果如下:
2.二维数组的二分搜索:
(二维数组转换为一维数组进行二分搜索)
代码如下:
#include<stdio.h>
void tbo(int a[][100],int b[],int m,int n)//二维数组转换为一维数组
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
b[j+i*n]=a[i][j];//二维数组与一维数组元素位置序号关系->j+i*n
}
}
}
void main()
{
int a[100][100],b[100],m,n,i,j,first,last,middle,search;
printf("enter m:");
scanf("%d",&m);//输入数组最大行数
printf("enter n:");
scanf("%d",&n);//输入数组最大列数
printf("enter %d elements:\n",m*n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);//输入数组存储元素
}
}
printf("enter search:");
scanf("%d",&search);//输入需查找的数组元素
first=0;//初始化数组元素的位置序号
tbo(a,b,m,n);//二维数组转换为一维数组
last=m*n-1;
middle=(first+last)/2;
while(first<=last)
{
if(search==b[middle])//判断查找元素是否等于数组元素
{
printf("%d 是数组中第%d个元素\n",search,middle+1);
break;//跳出循环
}
else if(search>b[middle])
{
first=middle+1;//防止查找时遗漏数组元素
}
else
{
last=middle-1;//防止查找时遗漏数组元素
}
middle=(first+last)/2;//需浏览的数组元素减半
}
if(first>last)//判断是否搜索到查找的元素
{
printf("%d 不是数组中的元素\n",search);
}
}
运行结果如下: