二进制搜索会在输出结尾添加1

时间:2013-07-03 20:05:13

标签: c++

我几乎是肯定的,这很简单,但我不能为我的生活弄清楚。整个代码是打印一个菜单,询问用户和数组大小,然后用随机数填充它,对其进行升序和降序排序,打印数组,以及让用户使用二进制搜索或顺序搜索。我知道线性搜索对于我们应该做的事情来说效率要高得多,但是教练坚持二元搜索。我有二进制搜索工作,它打印出正确的结果,但在它的末尾有一个1(即位置14出现为141)。这是调用函数的开关案例:

case 7:
    int num, result;
    cout << "Please enter an int to search for" << endl;
    cin >> num;
    result = binarySearch(Array1, num, 0, size);
    cout << num << "was found at position " << result;
    break;
    }
}

这是功能:

int binarySearch(int arr[], int key, int first, int last)
{
    while (first <= last)
    {
        int mid = (last + first) / 2;
        if (key < arr[mid])
        {
            last = mid - 1;
        }
        else if (key > arr[mid])
        {
            first = mid + 1;
        }
        else
        {
            return mid;
        }
    }
    return -1;
}

1 个答案:

答案 0 :(得分:2)

刚尝试了我的机器上的代码 - 我没有在输出中附加额外的1。所以,我认为1正在其他地方打印出来。

首先,添加空格(或endl末尾的cout。这将确认您获得的结果是正确的,并且1正在其他地方打印。然后,您可以尝试在代码中查找额外的1(可能在switch()之后)。

cout << num << "was found at position " << result << " ";

如果您需要进一步的帮助,请更新其余代码。