问题引入:
在一个递增数组中a[10],查找一个值为x的元素,如果找到了就输出值为x的元素的下标,如果没有输出-1。
算法一:遍历法
#include<stdio.h>
int main()
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int i , x ;
printf("请输入要查找的数x :\n");
scanf("%d",&x);
for(i = 0;i < 10;i++)
{
if(a[i] == x)
{
printf("找到了x :%d\n",i);
return 0;
}
}
printf("没有找到x \n");
return 0;
}
算法二:折半查找法
大家最好画个图,这样有助于理解这个过程。
#include<stdio.h>
int main()
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int left = 0;//最左边的下标
int right = 9;//最右边的下标
int middle;//中间的下标
int x;
printf("请输入要查找的数x:\n");
scanf("%d",&x);
while(left <= right)
{
middle = (left + right)/2;
if(x > a[middle])
{
left = middle + 1;
}
if(x < a[middle])
{
right = middle - 1;
}
if(x == a[middle])
{
printf("找到了x :%d\n",a[middle]);
return a[middle];
}
}
printf("NOT found\n");
return -1;
}