C++折半查找法练习

来源:互联网 发布:收银 知乎 编辑:程序博客网 时间:2024/05/24 02:23
#include <iostream>using namespace std;int main(){const int N=10; int left,right,middle,x; int a[N]={2,5,6,8,9,12,24,32,38,40};cout << "输入个要查找的数: "; cin>>x; for (left=0,right=N-1;left<=right;){    middle=(left+right)/2;    if (x==a[middle])        break;    else if (x<a[middle])        right=middle-1;    else        left=middle+1;} if (x==a[middle])    cout<<"a["<<middle<<"]="<<x<<endl; else    cout<<"查找不到"<<x<<endl;    return 0;} 

==================================================================================================================================

以下内容来自网络

原理:类似于二分法解方程,二分查找首先比对序列中间的数是否是要找的数,如果不是,由于是有序数列,则看其在左侧区间还是右侧区间,舍弃不在的那一半区间,然后在剩余的区间重复刚才的办法,直到找到该数,由于每次舍弃一半的数据量,所以查找效率较高。


描述:设三个变量 left,right,middle分别为序列的两侧下标和中间下标,当判断出不在左侧区间,则 left=middle+1 ,从而利用右侧一半构造出一个新区间,否则 right=middle-1,利用左边一侧构造新区间,然后重复刚才过程,如此下去,要么找到数据,要么left>right,此时也应该停止查找,说明序列中没有该数。


0 0
原创粉丝点击