0

我几乎可以肯定这很简单,但我一生都无法弄清楚。整个代码是打印一个菜单,询问用户数组的大小,然后用随机数填充它,升序和降序排序,打印数组,以及让用户使用二进制搜索或顺序搜索。我知道线性搜索对于我们应该做的事情要有效得多,但是讲师坚持使用二进制搜索。我有二进制搜索工作,它打印出正确的结果,但它的末尾有一个 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;
}
4

1 回答 1

2

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

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

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

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

于 2013-07-03T20:16:17.903 回答