2013-03-04 3 views
0

Я пишу программу, которая узнает, сколько миллисекунд требуется для прохождения различных процедур сортировки, чтобы найти наиболее эффективные. У меня возникли проблемы с получением правильного времени выхода из программы. Вместо отображения количества времени, таких как:Сроки эффективности алгоритмов сортировки, но получение неправильного вывода

Bubble Sort: 100 
Merge Sort: 45 
etc. 

Я получаю:

Bubble Sort: -3098 
Merge Sort: -3 
etc. 

Если кто-нибудь может помочь мне понять, почему это происходит, я действительно ценю это. Вот мой исходный код.

static double diffclock(clock_t clock1,clock_t clock2) 
{ 
    double diffticks=clock1-clock2; 
    double diffms=(diffticks)/(CLOCKS_PER_SEC/1000); 
    return diffms; 
} 

int main() 
{ 
clock_t begin, end; 

for (int n = 1; n<=1000000; n*=10) 
{ 
    cerr << n << endl; 
    int *array = new int[n]; 
    int *temparray = new int[n]; 

    srand((unsigned int)time(0)); 

    for (int i = 0; i < n; i++) 
    { 
     array[i] = rand()%1000; 
    } 

    begin = clock(); 
    bubbleSort(array, n); 
    end = clock(); 
    cerr << "Bubble Sort: " << diffclock(begin, end) << endl; 

    srand((unsigned int)time(0)); 

    for (int i = 0; i < n; i++) 
    { 
     array[i] = rand()%1000; 
    } 

    begin = clock(); 
    insertionSort(array, n); 
    end = clock(); 
    cerr << "Insertion Sort: " << diffclock(begin, end) << endl; 

    srand((unsigned int)time(0)); 

    for (int i = 0; i < n; i++) 
    { 
     array[i] = rand()%1000; 
    } 

    begin = clock(); 
    mergesort(array, 0, n-1, temparray); 
    end = clock(); 
    cerr << "Merge Sort: " << diffclock(begin, end) << endl; 

    srand((unsigned int)time(0)); 

    for (int i = 0; i < n; i++) 
    { 
     array[i] = rand()%1000; 
    } 

    begin = clock(); 
    quicksort(array, 0, n-1); 
    end = clock(); 
    cerr << "Quick Sort: " << diffclock(begin, end) << endl; 

    srand((unsigned int)time(0)); 

    for (int i = 0; i < n; i++) 
    { 
     array[i] = rand()%1000; 
    } 

    begin = clock(); 
    selectionSort(array, n); 
    end = clock(); 
    cerr << "Selection Sort: " << diffclock(begin, end) << endl; 
} 

    return 0; 
} 

С другой стороны, любая помощь будет принята с благодарностью.

ответ

3

вы должны вычитать Часы2 из Clock1 в

static double diffclock(clock_t clock1,clock_t clock2) 
{ 
    double diffticks=clock1-clock2; 

или выключатель начинаются и заканчиваются в

diffclock(begin, end) 

Ваш конец времени больше, что время начала, таким образом, вы получаете отрицательные значения, если вычесть (начало - конец).

1

Похоже, что вы выводите begin - end.

Смежные вопросы