こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語について質問です。

ソートについて勉強していて、乱数列の要素数Nの値を変えていきバブルソートの交換回数、比較回数を数えるプログラムを作り、後は処理時間について調べたいのですが、処理時間を出力させることはできたんですが、単位がわかりません。教えてください。
以下に乱数を生成するrand.cとバブルソートを行うbubblesort.cを記載します。

rand.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000

int num[N];

int makeDataFile ( void )
{
int i;
FILE *fp;
char s[100];
int num[N];
srand ( ( unsigned )time ( NULL ) );

fp = fopen ("rand1.txt", "w" );
if ( fp == NULL ) exit(1);
for ( i = 0; i < N; i++ ){
fprintf ( fp, "%d\n", rand()%100 );
}
fclose ( fp );

fp = fopen ( "rand1.txt", "r" );
if ( fp == NULL ) exit(1);
while( fgets ( s, sizeof (s), fp ) ) {
printf ( s );
}
fclose ( fp );

return N;
}

bubblesort.c
#include <stdio.h>
#include <time.h>

extern int makeDataFile ( void );
extern int num[];

void BubbleSort ( int x[] , int n );
void Show ( int x[] , int n );

int comp;
int swap;

void BubbleSort ( int x[] , int n )
{
int i, j, tmp;
for ( i = 0; i < n-1; i++ ) {
for ( j = n-1; j > i; j-- ){
comp++;
if ( x[i] > x[j] ){
swap++;
tmp = x[j];
x[j] = x[i];
x[i]= tmp;

Show ( x , n );
}
}
}
}

void Show ( int x[] , int n )
{
while ( n-- )
printf ( "%d " , *x++ );
printf ( "\n" );
}

int main(void)
{
int i, j, n , tmp;
FILE *fp;
comp = 0;
swap = 0;

n = makeDataFile();

fp = fopen ( "rand1.txt", "r" );
if ( fp == NULL ) return 1;

for ( i = 0; i < n; i++ ){
fscanf ( fp, "%d", &(num[i] ) );
}
fclose ( fp );

printf ( "\nbefore bubblesort\n" );
Show ( num , n );
printf ( "\n" );

printf ( "progress bubblesort\n" );
BubbleSort ( num , n );
printf ( "\n" );

printf ( "after bubblesort\n" );
Show ( num , n );
printf ( "\n" );

printf ( "count of comparisons : %d\n" , comp );
printf ( "count of swap : %d\n" , swap );

return 0;
}

実行結果:
(ソートは省略)
count of comparisons : 499500
count of swap : 14848
2.950000

と出力されたのですが読み方?単位が分かりません。教えてください。2分ぐらいかかった気がします。

投稿日時 - 2013-07-18 16:02:23

QNo.8181643

困ってます

質問者が選んだベストアンサー

http://okwave.jp/qa/q8180557.html の続きですよね?

結局、どの方法使ったのか、プログラム中にないのでわかりませんが。

その使った関数のマニュアルは読みましたか?
上記#1にあったURL
http://msdn.microsoft.com/ja-jp/library/4e2ess30%28v=VS.71%29.aspx
を読めば
「clock 関数は、呼び出しプロセスにかかった時間を通知します。タイマ刻みの単位は、約 1/CLOCKS_PER_SEC 秒です。」
と、明記されています。
「終了時のクロック」-「開始時のクロック」= 「間のクロック数」
を計算して、CLOKS_PER_SECで割る (= 1/CLOCKS_PER_SEC 掛ける)と、
どんな単位の何の値になるか、わかるはずです。

投稿日時 - 2013-07-18 18:23:02

お礼

URLを貼っていただきありがとうございます。

投稿日時 - 2013-07-21 10:22:35

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>と出力されたのですが読み方?単位が分かりません。教えてください。2分ぐらいかかった気がします。

どうやって計測したのか書きましょう。
数値だけだされても、それで単位がわかる人はいません。

『「123」と表示されました。単位を教えてください』で、単位がわかると思いますか?

投稿日時 - 2013-07-18 20:40:48

ANo.3

あと。
void BubbleSort ( int x[] , int n )の中に Show ( x , n ); がありますよね?
この所為で、交換の度に全内容が出力されます。
内部の計算と比べて、画面出力とかファイル出力とかは、とてもとても遅いです。

その実行時間のほとんどは、このShow関数によるものです。

投稿日時 - 2013-07-18 19:50:05

ANo.1

1つ確認なんだけど, 最後の
2.950000
はこのプログラムのどこで出力させてるの?

投稿日時 - 2013-07-18 16:40:13

あなたにオススメの質問