2013-07-03 2 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

вы не делаете 'соиЬ << епсИ.. 'так что дополнительный '1' приходит откуда-то еще. – Roddy

+2

Поскольку 1 печатается независимо от того, что вы поиск, маловероятно, что логика двоичного поиска имеет проблему. Метод binarySearch является правильным. Можете ли вы опубликовать, что происходит после условия переключения? –

+0

Вот почему вы должны попытаться составить краткое тестовое задание, прежде чем задавать вопрос. Вы обнаружите то, что, по вашему мнению, проблема, не проблема. – Cogwheel

ответ

2

Просто попробовал код на моей машине - я не получаю дополнительный 1 прилагаемый к выходу. Итак, я думаю, что 1 печатается где-то в другом месте.

Сначала добавьте пробел (или endl в конце cout. Это подтвердит, что результат, который вы получаете, является правильным, а также что 1 печатается в другом месте. Затем вы можете попробовать найти дополнительные 1 печатается в коде (после включения() вероятно)

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

Обновление остальной части кода, если вам нужна дополнительная помощь

+0

Спасибо за помощь, вся причина в том, что я забыл положить этот конец после результата. После помещения endl ;. 1 больше не появляется. – user2325795

Смежные вопросы