线性/二进制搜索功能不显示任何内容?

时间:2013-12-04 01:27:07

标签: c++ function binary-search linear-search

我正在比较线性和二进制搜索以及每个搜索的速度。但是当我编译程序时没有任何显示,我无法弄清楚原因。当我只有输入并测试它的线性搜索部分时,这个工作。任何帮助将不胜感激~~。谢谢。

#include <iostream>
using namespace std;

int linearSearch(const int integerArray[],int,int);
int binarySearch(const int integerArray[],int,int);
const int SIZE = 20;

    int main()
    {
        int integerArray[SIZE]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10};
        int position1,position2;

        cout << "This program will compare search efficiency for the linear and binary searches " << endl;

        position1 = linearSearch(integerArray,SIZE,7);
        position2 = binarySearch(integerArray,SIZE,7);

        cout << position1 << endl;
        cout << position2 << endl;

        return 0;
    }

    int linearSearch(const int integerArray[],int SIZE,int value)
    {
        int index = 0;
        int position1 = -1;
        bool foundNum = false;

        while(index < SIZE)
        {
            if(integerArray[index] == value)
            {
                foundNum = true;
                position1 = index;
            }
            index++;
        }
        return position1;
    }

    int binarySearch(const int integerArray[],int size,int value)
    {
        int first = 0;
        int last = size-1;
        int midpoint = (first+last)/2;
        int position2 = -1;
        bool foundNum = false;

        while(!foundNum && first<=last)
        {
            if(integerArray[midpoint] == value)
            {
                foundNum = true;
                position2++;
                return position2;
            }
            else if(integerArray[midpoint] > value)
            {
                last = midpoint-1;
                position2++;
            }
            else
                last = midpoint+1;
                position2++;


        }
        return position2;
    }

2 个答案:

答案 0 :(得分:0)

在您的binarySearch函数midpoint中永远不会更改,因此结果是无限循环,除非立即找到该数字。

您应该通过将midpoint置于循环内来更新midpoint = (first+last)/2;

答案 1 :(得分:0)

这听起来像是一个家庭作业问题,所以我不会为你做,但似乎问题在于你的二元搜索。请考虑以下事项:

  1. 每次迭代都需要重新计算中点。你只做一次。
  2. 需要修改一个案例 first,以及修改last的单独案例。你有 两个修改last的案例。
  3. 你甚至需要position2吗? midpoint变量不能用于此目的吗?
  4. 祝你好运!