折半查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=1,上限为h=5,
求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找;否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半
段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。
具体实现的代码如下:
/************************************************* ****************折半查找(二分查找)**************** *************************************************/ #include <iostream> using namespace std; void main() { int i,j,size; //指定数组长度 cout<<"要查找的数组长度为:(小于10)"; cin>>size; if(size>10) { cout<<"数组长度错误!"<<endl; return; } float temp,a[10]; //从键盘上为数组赋值 for (i=0;i<size;i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } //使用冒泡排序法对数组按从小到大顺序排序 for (i=0;i<size-1;i++) { for (j=i+1;j<size;j++) { if (a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } //显示排序结果 cout<<"排序后的数组为:"; for (i=0;i<size;i++) { cout<<a[i]<<" "; } cout<<endl; //输入要查找的数据 int value; int flag; int low,high,mid; for (i=1;i<=size-1;i++) { cout<<"要查找的数值是:"; cin>>value; //二分法(又叫折半查找法) flag=0; low=0; high=size-1; while(low<=high) { mid=(high+low)/2; if (a[mid]==value) { flag=1; break; } else if (a[mid]<value) { low=mid+1; } else { high=mid-1; } } if (flag) { cout<<"数值已找到在:a["<<mid<<"]="<<a[mid]<<endl; } else { cout<<"数值"<<value<<"没有找到"<<endl; } } }