mamadaliev
@mamadaliev
Intern Java Developer

Как найти время работы и количество перестановок сортировки?

Всем доброго времени суток. Вопрос по алгоритмам сортировки на языке Си/C++.
Как найти время работы и количество перестановок сортировки (программы)?

Допустим, есть код сортировки "пузырьком" (обменом).
//код программы сортировки «Пузырьком»
#include <iostream>

void bubbleSort(int list[], int n)
{
    for (int i=n-1; i>0; i--)
        for (int k=0; k<i; k++)
            if (list[k] > list[k+1])
                std::swap(list[k], list[k+1]);
}
int main()
{
    const int n=10;
    int list[n];
    std::cout << "Enter any " << n << " numbers:\n";
    for (int i=0; i<n; i++) std::cin >> list[i]; // ввод с клавиатуры
    bubbleSort(list, n); // сортировка
    std::cout << "\nSorted Array:\n";
    for (int i=0; i<n; i++) std::cout << list[i] << " "; // вывод на экран
}

P.S. Судите как можно строго!
  • Вопрос задан
  • 1997 просмотров
Решения вопроса 2
@MiiNiPaa
Количество перестановок: оберните std::swap в функцию, которая будет считать количество вызовов:

struct CountingSwap
{
    int count = 0;
    template <typename T>
    void operator()(T& lhs, T& rhs)
    {
        using std::swap;
        swap(lhs, rhs);
        ++count;
    }
};

int bubbleSort(int list[], int n)
{
    CountingSwap swap;
    for (int i=n-1; i>0; i--)
        for (int k=0; k<i; k++)
            if (list[k] > list[k+1])
                swap(list[k], list[k+1]);
    return swap.count;
}


Время: запомните время перед стартом сортировки, отсортируйте массив, запомните время после сортировки, вычтите из конца начало.

coliru.stacked-crooked.com/a/f04ed10ad976db8c
Ответ написан
@GS0
#include <time.h>
...
double t1 = clock(); // замеряем время до
bubbleSort(int list[], int n); // сортируем
double t2 = clock(); // замеряем время после
double t3 = (t2-t1) / CLOCKS_PER_SEC; // время в секундах
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы