Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
#1

Время выполнения алгоритма - C++

21.07.2011, 20:05. Просмотров 1671. Ответов 15
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <cstdlib>
#include <time.h>
 
 
using namespace std;
 
void heapSort(int *a, int size) ;     // функции которые реализуют пирамидную сортировку
void downHeap(int *a, int k, int n);
 
int main() {
  time_t rawtime, iop;
  struct tm *timeinfo, *mop;
  setlocale( LC_ALL,"Russian" ); 
  const int r = 5; // размер массива
  int i;
  int mas1[r];
  for(i = 0; i < r; i++) mas1[i] = rand(); // функция rand генерирует случайные числа
  cout << "Инициализируем массив случайными числами: ";
  for(i = 0; i < r; i++) cout << mas1[i] << ' ';
  cout << '\n';
  time(&rawtime);
  timeinfo = localtime(&rawtime);
  heapSort(mas1,r); // сортируем массив используя алгоритм пирамидной сортировки 
  time(&iop);
  mop = localtime(&iop);
  cout << "Время: " << mop->tm_sec - timeinfo->tm_sec << '\n';
  cout << "Сортируем массив используя алгоритм пирамидной сортировки: ";
  for(i = 0; i < r; i++) cout << mas1[i] << ' ';
  cout << '\n';
  return 0;
}
 
 
void heapSort(int *a, int size) {
  int i;
  int temp;
 
  // строим пирамиду 
  for(i=size/2-1; i >= 0; i--) downHeap(a, i, size-1);
  
  // теперь a[0]...a[size-1] пирамида 
 
  for(i=size-1; i > 0; i--) {
    // меняем первый с последним 
    temp=a[i]; a[i]=a[0]; a[0]=temp;
    // восстанавливаем пирамидальность a[0]...a[i-1] 
    downHeap(a, 0, i-1); 
  }
}
 
 
 
void downHeap(int *a, int k, int n) {
  //  процедура просеивания следующего элемента 
  //  До процедуры: a[k+1]...a[n]  - пирамида 
  //  После:  a[k]...a[n]  - пирамида 
  int new_elem;
  int child;
  new_elem = a[k];
 
  while(k <= n/2) {             // пока у a[k] есть дети 
    child = 2*k;
    //  выбираем большего сына 
    if( child < n && a[child] < a[child+1] ) 
    child++;
    if( new_elem >= a[child] ) break; 
    // иначе 
    a[k] = a[child];    // переносим сына наверх 
    k = child;
  }
  a[k] = new_elem;
}
Почему не выщитывается время выполнения алгоритма? Программа показывает 0.
Использую функции time, localetime. Не пойму в чем дело?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2011, 20:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Время выполнения алгоритма (C++):

Рассчитать время выполнения алгоритма - C++
рассчитать время выполнения алгоритма со сложностью О (n^2) для n=10000 если время выполнения для n=1000 равно 0,1 мсек помогите...

Как узнать время выполнения алгоритма - C++
Мне нужно сравнить несколько алгоритмов сортировки. Но таким способом как у меня, дает очень маленькие значения .... дл массива int -...

Время выполнения рекурсивного и итерационного алгоритма быстрой сортировки - C++
Почему вот это : void sort(int *ar, int L, int R){ int i, j, x, buf; x = ar; i = L; j = R; do { ...

Как правильно задать параметр "время выполнения алгоритма"? - C++
как правильно задать параметр &quot;время выполнения алгоритма&quot;? #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; #include...

оценку времени выполнения алгоритма на С++ - C++
оценить время работы алгоритма для матриц размерностей от 5 на 5 (верхний предел может быть больше), результаты измерений записать в файл ...

Подсчёт времени выполнения алгоритма. выводит 0 - C++
Подскажите что тут не так. Выводит 0 как-будто времени не проходит void W(vector&lt;int&gt; &amp; A, int n){ int naim; for(int i = 1;...

15
An1ka
66 / 71 / 2
Регистрация: 30.06.2011
Сообщений: 176
21.07.2011, 20:09 #2
Возможно очень быстро выполняется ?
0
-=ЮрА=-
Заблокирован
Автор FAQ
21.07.2011, 20:09 #3
Возможно что время выполнения алгоритма меньше секунды и тогда
C++
1
timeinfo->tm_sec - mop->tm_sec == 0
не думал использовать поля миллисекунд???
0
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
21.07.2011, 20:10  [ТС] #4
Цитата Сообщение от An1ka Посмотреть сообщение
Возможно очень быстро выполняется ?
А у тебя что показывает?=)
0
prZzZ
Программист
112 / 92 / 5
Регистрация: 22.03.2011
Сообщений: 235
21.07.2011, 20:12 #5
Используйте GetTickCount()
0
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
21.07.2011, 20:17  [ТС] #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Возможно что время выполнения алгоритма меньше секунды и тогда
C++
1
timeinfo->tm_sec - mop->tm_sec == 0
не думал использовать поля миллисекунд???
Такого поля нет.
0
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
21.07.2011, 20:32  [ТС] #7
Как получить время в миллисекундах?
0
prZzZ
Программист
112 / 92 / 5
Регистрация: 22.03.2011
Сообщений: 235
21.07.2011, 20:38 #8
C++
1
2
3
4
5
    DWORD time_begin, time_end;
    time_begin = GetTickCount();
    heapSort(mas1,r); // сортируем массив используя алгоритм пирамидной сортировки 
    time_end = GetTickCount();
    cout << "Время: " << time_end - time_begin << '\n';
1
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
21.07.2011, 20:48  [ТС] #9
Цитата Сообщение от prZzZ Посмотреть сообщение
C++
1
2
3
4
5
    DWORD time_begin, time_end;
    time_begin = GetTickCount();
    heapSort(mas1,r); // сортируем массив используя алгоритм пирамидной сортировки 
    time_end = GetTickCount();
    cout << "Время: " << time_end - time_begin << '\n';
Время 0 показывает тоже.
0
Daemon025
380 / 329 / 67
Регистрация: 06.12.2010
Сообщений: 900
21.07.2011, 20:51 #10
сделай размер массива каких 50000
0
prZzZ
Программист
112 / 92 / 5
Регистрация: 22.03.2011
Сообщений: 235
21.07.2011, 21:20 #11
У вас действительно функция пролетает очень быстро попробуйте так:
C++
1
2
3
4
5
6
7
8
9
    LARGE_INTEGER freq;
    LARGE_INTEGER t1;
    LARGE_INTEGER t2;
    QueryPerformanceFrequency(&freq)
    QueryPerformanceCounter(&t1);
    heapSort(mas1,r); // сортируем массив используя алгоритм пирамидной сортировки 
    QueryPerformanceCounter(&t2);
    double dt = t2.QuadPart - t1.QuadPart;
    double elapsed_time = 1000 * dt / freq.QuadPart; // время выполнения в миллисекундах...
2
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.07.2011, 21:33 #12
ахах...парень насмешил, массив из 5 элементов
0
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
21.07.2011, 21:40  [ТС] #13
Цитата Сообщение от Maxwe11 Посмотреть сообщение
ахах...парень насмешил, массив из 5 элементов
ахах у меня комп зато с космической скоростью=))
0
Nikosinskiy
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 4
21.07.2011, 21:57 #14
Ну прямо не назавидуюсь))))
0
prZzZ
Программист
112 / 92 / 5
Регистрация: 22.03.2011
Сообщений: 235
22.07.2011, 01:34 #15
ElvenDragon, Посмотрите Как правильно ипользовать clock() и GetTickCount()? посты: #14, #15, #16
0
22.07.2011, 01:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2011, 01:34
Привет! Вот еще темы с ответами:

Проверка времени выполнения алгоритма линейного поиска - C++
Имею вот такой код: #include &lt;random&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;windows.h&gt; int findElement(int* array,...

После выполнения алгоритма программа сразу закрывается - как исправить? - C++
дела такое: (циклический алгоритм, задача с матрицами) программа запускается в Win32 Console Application, но после выполнения алгоритма...

Время работы программы (алгоритма) - C++
не получается посчитать время работы алгоритма программы! #include &lt;iostream&gt; using std::cout; using std::cin; using std::endl; ...

Время выполнения - C++
Я здесь в первый раз и ещё не разобралась с форумом, дико извиняюсь если что не так. Мне нужно чтобы определялось время выполнения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.