n个数据用一数组a描写,查找工具用x描写。
我们可以将n个数据与查找工具依次较量,大概找到,也大概找不到。这是一种顺序查找的要领,请读者编程实现。
比顺序查找进一步的是折半查找,或称二分查找法。折半查找要求n个数据已排好序,排序的目标就是为了快速查找。假定n个数据已经过小到大排好序。查找到的数据用其下标k描写。是否找到用一符号变量flag描写。
查找问题转化成在区间[O,n一1]找k。先计较个中点d,假如a[d]一x,则k—d;假如a[d]>x,则查找区间缩小为[O,d];假如a[d]<x,则查找区间缩小为[d,n一1]。要么找到,要么查找区间缩小一半,继承折半查找。
措施如下:
float serach(a,n,x)/*折半查找函数*/
float a[],x;
int n:
{int k,flag;
int b=O,e=n一1,d;
flag=O;
do
{d=(b+e)/2;
if(a[d]==x){k=d;flag=1;}
else if(a[d]>x)e=d;
else b=d:
)while(b<e&&!flag);
if(flag==O)k=O;/*没找到*/
return(k);
}