ソートの時間計算について
ソートの時間計測について以下のようなプログラムを作成したのですが、ソートはうまく動きますが何度試しても処理時間が0.00000秒となってしまいます。どのように改良すればこのような問題を解決できるのでしょうか。ご回答よろしくお願いいたします。
#include <stdio.h>
#include <time.h>
#define SIZE 100
void swap(int data[], int s, int t){
int tmp = data[s];
data[s] = data[t];
data[t] = tmp;
}
void Bsort(int data[], int size) {
int i, j;
for(i=1; i<size; i++){
for(j=(size-1); j>0; j--){
if(data[j] < data[j-1]){
swap(data, j, j-1);
}
}
}
}
void Ssort(int data[], int size){
int i, j, k, tmp;
for(i=1; i<size; i++){
k = data[i-1];
for(j=i; j<size; j++){
if(k>data[j]){
tmp = k;
k = data[j];
data[j] = tmp;
}
}
tmp = k;
k = data[i-1];
data[i-1] = tmp;
}
}
void printArray(int ar[], int size) {
int i;
for (i = 0; i < size; i++)
printf("%4d", ar[i]);
printf("\n");
}
int main(void)
{
int i, x;
int data[SIZE]= {412, 54, 595, 329, 24, 488, 313, 272, 129, 210,
670, 516, 342, 541, 491, 640, 167, 117, 726, 206,
474, 762, 153, 292, 1000, 607, 151, 661, 93, 270,
737, 531, 641, 548, 299, 287, 547, 394, 550, 475,
443, 261, 707, 503, 403, 739, 226, 646, 778, 588,
427, 169, 477, 572, 413, 300, 88, 321, 55, 779,
542, 680, 211, 273, 288, 276, 405, 307, 424, 668,
756, 255, 190, 449, 35, 435, 91, 486, 58, 408,
4, 63, 534, 330, 701, 65, 256, 311, 586, 404,
459, 254, 291, 333, 42, 343, 418, 512, 164, 56};
clock_t t1,t2;
printf("番号を入力してください。\n1,Bubble Sort\n2,Selection Sort\n");
scanf("%d", &x);
switch(x){
case 1:
printf("before:");
printArray(data, SIZE);
t1 = clock();
Bsort(data, SIZE);
t2 = clock();
printf(" after:");
printArray(data, SIZE);
printf("処理時間:%f[ms]¥n", (double)(t2 - t1) / CLOCKS_PER_SEC);
break;
case 2:
printf("before:");
printArray(data, SIZE);
t1 = clock();
Ssort(data, SIZE);
t2 = clock();
printf(" after:");
printArray(data, SIZE);
printf("処理時間:%f[ms]¥n", (double)(t2 - t1) / CLOCKS_PER_SEC);
break;
}
return 0;
}
お礼
大変参考になりました。プログラムもうまくいきました。 どうもありがとうございました!