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