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);
}