求代码,C++折半查找的

使用折半查找任意个数字,程序首先输入两个整数n,k,表示被查找的数字的数量和需要查找的数字的数量,然后输入待查找的n个数字,输入k个需要查找的数字,返回下标,没有找到则返... 使用折半查找任意个数字,程序首先输入两个整数n,k,表示被查找的数字的数量和需要查找的数字的数量,然后输入待查找的n个数字,输入k个需要查找的数字,返回下标,没有找到则返回0。
样例输入
5 2
1 4 6 7 8
5 8
样例输入
0 5
备注:请把数组开得大一些,否则会超时,待查找的数组是个有序数组
求代码!求代码!求代码!
展开
 我来答
丿艾瑞灬莉娅
2018-08-04 · TA获得超过916个赞
知道小有建树答主
回答量:926
采纳率:78%
帮助的人:433万
展开全部
#include <iostream>
using namespace std;

int getPos(int a[], int x)
{
    int left = 1, right = a[0];
    int mid;
    while( left <= right )
    {
        mid = (left+right)/2;
        if( a[mid] > x ){
            right = mid-1;
        }else if( a[mid] < x ){
            left  = mid+1; 
        }else{
            return mid;
        }        
    }
    return 0;         
}

int main( ) 
{    
    int n, k;
    while( cin >> n >> k )
    {
        int *a = new int[n+1];
        int i, x;
        for(i = 1; i <= n; ++i)
            cin >> a[i];
        a[0] = n;
            
        while( k-- ){
            cin >> x;
            int index = getPos(a, x);
            cout << index << " ";    
        }
        cout << endl;
    }
    
    return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式