Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Измерение времени выполнения алгоритма!

7.3K
28 апреля 2008 года
vova_b
49 / / 24.09.2006
Привет! У меня такая проблема: есть алгоритм MSD сортировки
Код:
#include <iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
clock_t start,finish;

void createCounters(int *, long *, long );
void radixPass(short , long , int *, int *, long *);
void radixSort(int* &, long );
void printMass(int [], int );

main()
{
   int a[5];
   for(int i=0;i<5;i++)
   {
   a=rand()%1000;
   }
  printMass(a, sizeof(a)/sizeof(int));
  radixSort(a, sizeof(a)/sizeof(int));
  printMass(a, sizeof(a)/sizeof(int));
  cin.get();

 return 0;
}

void createCounters(int *data, long *counters, long N)
{
  start=clock();
  memset( counters, 0, 256*sizeof(int)*sizeof(long) );

  char *bp = (char*)data;
  char *dataEnd = (char*)(data + N);
  short i;

    while ( bp != dataEnd )
   {
        for (i=0; i<sizeof(int);i++)
            counters[256*i + *bp++]++;
    }
}

void radixPass (short Offset, long N, int *source, int *dest, long *count)
{
  int *sp;
  long s, c, i, *cp;
  char *bp;

  s = 0;
  cp = count;
  for (i = 256; i > 0; --i, ++cp)
  {
    c = *cp;
    *cp = s;
    s += c;
  }

  bp = (char *)source + Offset;
  sp = source;
  for (i = N; i > 0; --i, bp += sizeof(int) , ++sp)
  {
    cp = count + *bp;
    dest[*cp] = *sp;
    ++(*cp);
  }
}

void radixSort (int* &in, long N)
{
  int *out = new int[N];
  int *temp = new int[N];
  long *counters = new long[sizeof(int)*256], *count;
  createCounters(in, counters, N);

  for (short i=0; i<sizeof(int); i++)
  {
    count = counters + 256*i;

    if ( count[0] == N ) continue;

    radixPass (i, N, in, out, count);
    for(int i = 0;i < N; ++i)
    {
     temp=in;
     in=out;
     out=temp;
    }
  }

  delete out;
  delete counters;
  delete temp;
}

void printMass(int A[], int f)
{
  cout << "\nMass:";
  for(int i = 0; i < f; i++)
  cout << ' ' << A;
  cout << '\n';


  }


И есть алгоритм измерения времи выполнения алгоритмов:
 
Код:
#include<time.h>
clock_t start,finish;
start-clock();
................
finish=clock();
float time=(finish-start)/CLK_TCK


Основная проблема в том что я незнаю как правильно вставить start и finish, может ктонить поможет???:)
320
28 апреля 2008 года
m_Valery
1.0K / / 08.01.2007
Цитата: vova_b

...
И есть алгоритм измерения времи выполнения алгоритмов:
 
Код:
#include<time.h>
clock_t start,finish;
start-clock();
................
finish=clock();
float time=(finish-start)/CLK_TCK


Основная проблема в том что я незнаю как правильно вставить start и finish, может ктонить поможет???:)


Ну для начала что такое start - clock() ? Наверное,start = clock().Это в алгоритме измерения времени...Определить start = clock() до функции сортировки,а finish=clock() после этой функции,т.е после выполнения radixSort.

7.3K
29 апреля 2008 года
vova_b
49 / / 24.09.2006
Цитата: m_Valery
Ну для начала что такое start - clock() ? Наверное,start = clock().Это в алгоритме измерения времени...Определить start = clock() до функции сортировки,а finish=clock() после этой функции,т.е после выполнения radixSort.



Да все именно так!!!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог