2013-07-03 28 views
0

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

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

你不这样做'COUT << ENDL。; '所以额外的'1'来自其他地方。 – Roddy

+2

因为1是打印出来的,不管你是什么搜索,二进制搜索逻辑不太可能存在问题。 binarySearch方法是正确的。你可以发布切换条件后发生的事情吗? –

+0

这就是为什么你应该在提出问题之前尝试做一个简洁的测试用例。你会发现你认为的问题是问题不是问题。 – Cogwheel

回答

2

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

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

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

更新代码的其余部分,如果你需要进一步的帮助

+0

谢谢你的帮助,全部原因是因为我忘了把结果放在结果后。放完之后1不再出现。 – user2325795