顺序查找法,不要求被查找的数组元素事先是有序排列的;折半查找要求被查数组是有序的。
若初始查找区间为R[low …… high]
,循环条件为low <= high
,首先选取位于数组中间mid
的元素,将其和待查找的数进行比较,如果它们的值相等,则查找成功,退出循环,否则根据比较的结果确定下次查找的范围是在数组的前半部分R[low …… mid-1]
还是后半部分R[mid+1 …… high]
,然后在新的查找范围内进行同样的查找,如此重复下去,直到查找成功或循环条件不满足退出循环。
#include<stdio.h>
#define N 15
int main()
{
int i,x,m,a[N]={4,9,14,16,17,19,28,33,42,51,64,75,84,91,100};
scanf("%d",&x);
int s=sizeof(a)/sizeof(int),left=0,right=s-1;
for(i=0;i<s;i++)
{
if(left>right)
{
printf("查找区间下界,上界[%d,%d],查找失败",left,right);
break;
}
m=(right+left)/2;
printf("查找区间下界,上界,中间点[%d,%d,%d]\n",left,right,m);
if(a[m]>x)
right=m-1;
else if(a[m]<x)
left=m+1;
else
{
printf("查找成功,%d的下标:%d",x,m);
break;
}
}
return 0;
}