Напишите версию функции с одной проверкой внутри цикла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Керниган и Ритчи "Язык программирования C". Упражнение 3.1 В этом двоичном поиске каждый цикл содержит две проверки, тогда как достаточно было бы одной (зато взамен их потребовалось бы больше снаружи цикла). Напишите версию функции с одной проверкой внутри цикла.
Листинг программы
  1. int binsearch (int x, int v[], int n)
  2. {
  3. int low, high, mid;
  4. low = 0;
  5. high = n - 1;
  6. while (low <= high) {
  7. mid = (low+high) / 2;
  8. if (x < v[mid])
  9. high = mid - 1;
  10. else if (x > v[mid])
  11. low = mid +1;
  12. else
  13. return mid;
  14. }
  15. return -1;
  16. }

Решение задачи: «Напишите версию функции с одной проверкой внутри цикла»

textual
Листинг программы
  1. int binsearch (int x, int v[], int n){
  2.   int low, high, mid;
  3.   for( low = 0, high = n-1, mid = (low+high)/2;
  4.        ( v[mid]!=x ) && ( low < high ); mid = (low+high)/2 )
  5.   {
  6.     if (x < v[mid]){
  7.       high = mid - 1;
  8.     }else{
  9.        low = mid +1;
  10.     }
  11.   }
  12.   return mid;
  13. }
  14.  
  15. int main(){
  16.   int nArr[] = {0,1,2,3,4,5,6,7,8,9}, i;
  17.   printf( "%d\n", binsearch( 5, nArr, sizeof(nArr)/sizeof(int) ) );
  18.   return 0;
  19. }

Объяснение кода листинга программы

  1. В функции binsearch объявлены три переменные типа int: low, high и mid. Значение переменной mid инициализируется в первой итерации цикла.
  2. Далее в цикле, пока условие ( v[mid]!=x ) && ( low < high ) истинно, выполняется следующая часть кода:
  3. Если x меньше значения в индексе mid в массиве v, то значение переменной high уменьшается на единицу, чтобы в следующем шаге уменьшить область поиска.
  4. Если x больше или равно значению в индексе mid, то значение переменной low увеличивается на единицу, чтобы в следующем шаге увеличить область поиска.
  5. После каждой итерации значение переменной mid обновляется в соответствии с формулой (low+high)/2.
  6. Когда условие ( v[mid]!=x ) && ( low < high ) становится ложным, выполняется последняя часть кода внутри цикла:
  7. Значение переменной mid возвращается из функции как результат.
  8. В функции main объявлен массив nArr типа int с десятью элементами от 0 до 9.
  9. Функция binsearch вызывается с аргументами 5, nArr и sizeof(nArr)/sizeof(int).
  10. Результат работы функции binsearch выводится на экран с помощью функции printf.
  11. Функция main возвращает 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы