ソートの時間計算について
ソートの時間計測について以下のようなプログラムを作成したのですが、ソートはうまく動きますが何度試しても処理時間が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;
}
補足
回答ありがとうございます。 参考にしてやってみたのですが、うまくできません。 どこを直したらいいか教えて下さい。 #include <stdio.h> void printdata(int *,int); main() { int a[10]; int n=10; int t; int i,j; int kekka=0; for(i=0;i<n;i++){ printf("%d番目の数字を入力して下さい。\n",i+1); scanf("%d\n",&a[i]); } printdata(a,kekka); for(i=0;i<n-1;i++){ for(j=0;j<n-1-i;j++){ if( a[i] > a[i+1] ) { my_swap( &a[i], &a[i+1] ); for(j=i; j>1; j--) { if(a[j] < a[j-1]) { my_swap(&a[j],&a[j-1]); } else { break; } } if( i>0 ) i-1; } } t=a[j]; a[j]=a[j+1]; a[j+1]=t; printf("[%d]と[%d]を入れ替え\n",i,i+1); printdata(a,kekka); } } } } void printdata(int a,int kekka) { int i; int n; for(i=0;i<n;i++){ if(a[i]!=0){ printf("%4d",a[i]); } } printf("合計 = %d\n",kekka); }