Функция: подсчет количества сравнений чисел, выполняемых при операциях сортировки/поиска - C (СИ)

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

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

Подсчет количества сравнений чисел, выполняемых при операциях сортировки, многократного линейного и многократного бинарного поиска.Помогите написать функцию)

Решение задачи: «Функция: подсчет количества сравнений чисел, выполняемых при операциях сортировки/поиска»

textual
Листинг программы
#include <stdio.h>
 
/* с(expr) - сравнение*/
#define c(x) compare(x, 0)
/* cn() - возврат кол-ва сравнений */
#define cn() compare(0, 1)  
/* cr() - сброс счетчика сравнений */
#define cr() compare(0, -1)
 
unsigned compare(int cmp, int op)
{
   static unsigned countcmps = 0;
   
   if (!op)
   {
      countcmps++;
      return cmp;
   }
   
   if (op == -1) countcmps = 0;
   return countcmps;
}
 
int main()
{ 
   /* 2 сравнения */
   printf("1 > 0?: %d\n5 < 3?: %d\n5 || 3?: %d\n1 && 0?: %d\n", 
          c(1 > 0), c(5 < 3), c(5 || 3), c(1 && 1));
   
   /* кол-во сравнений */
   printf("total compares: %d, then reset: cr()\n", cn());
   
   cr(); /* сброс счетчика */
   printf("total compares: %d\n", cn());
   
   return 0;
}

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

  1. Включаем заголовочный файл stdio.h для использования функций вывода
  2. Определяем макросы c(x) и cn() для подсчета сравнений в функции main()
  3. Определяем макрос cr() для сброса счетчика сравнений
  4. Создаем функцию compare(int cmp, int op) для подсчета количества сравнений
  5. В функции compare(int cmp, int op) используем статическую переменную countcmps для хранения количества сравнений
  6. Если op равно 0, увеличиваем countcmps на 1 и возвращаем cmp
  7. Если op равно -1, сбрасываем countcmps в 0 и возвращаем countcmps
  8. Возвращаем countcmps в случае всех остальных значений op
  9. В функции main() выполняем 4 сравнения с использованием макроса c(x) и выводим результаты
  10. Выводим общее количество сравнений с использованием макроса cn() и сбрасываем счетчик с помощью макроса cr()
  11. Выводим общее количество сравнений после сброса счетчика
  12. Завершаем программу с возвратом 0

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


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

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

10   голосов , оценка 3.7 из 5
Похожие ответы