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;
}

繰り返しますが、どんな助けでも大歓迎です。

4

2 に答える 2

3

で clock1 から clock2 を減算する必要があります

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

または開始と終了を切り替える

diffclock(begin, end) 

終了時間は開始時間よりも大きいため、(開始 - 終了) を引くと負の値が得られます。

于 2013-03-04T21:15:39.097 に答える
1

を出力しているようですbegin - end

于 2013-03-04T21:15:30.027 に答える