質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

2929閲覧

ソート(選択ソート)の所要時間測定の方法

masuter0413

総合スコア50

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/12/11 10:41

ソート時間の計測は以下のようにすると正しく計測できるでしょうか?(main関数10行目~)
先生はmalloc()でメモリを確保するのに時間がかかるのでそこはカウントせずに、sortの関数実行にかかる時間だけを計測しなさいと言われました。

c

1#include<stdio.h> 2#include<stdlib.h> 3#include<time.h> 4/*#define DEBUG*/ 5clock_t clock(void); 6typedef struct _dList { 7 struct _dList *prev; /* pのオブジェクトへのポインタ */ 8 struct _dList *next; /* 後ろのオブジェクトへのポインタ */ 9 int data; 10} dList; 11dList * addList(dList ** pstart, int data) { 12 dList *p, *new; 13 p = *pstart; 14 if ((new = (dList *)malloc(sizeof(dList))) == NULL) { 15 return NULL; 16 } 17 new->data = data; 18 new->prev = new->next = NULL; 19 if (p != NULL) { 20 while (p->next != NULL) { 21 p = p->next; 22 } 23 p->next = new; 24 new->prev = p; 25 } 26 else { 27 *pstart = new; 28 } 29 return new; 30} 31void debug(dList **pstart) { 32 dList *p = *pstart; 33 while (p != NULL) { 34 printf("%d ", p->data); 35 p = p->next; 36 } 37 printf("\n"); 38} 39void sort_select(dList **pstart) { 40 dList *p, *top; 41 top = p = *pstart; 42 while (top != NULL) { 43 dList *p = top; 44 while (p != NULL) { 45 if (top->data > p->data) { 46 int swap; 47 swap = top->data; 48 top->data = p->data; 49 p->data = swap; 50 } 51 p = p->next; 52 } 53 top = top->next; 54#ifdef DEBUG 55 debug(pstart); 56#endif 57 } 58} 59int main() 60{ 61 dList*p, *tmp; 62 p = NULL; 63 int data; 64 while (scanf("%d", &data) != EOF) { 65 p = addList(&p, data); 66 } 67 while (p->prev != NULL) { 68 p = p->prev; 69 } 70 clock_t start = clock(); 71 sort_select(&p); 72 clock_t end = clock(); 73 printf("ソート時間: %f sec\n", (double)(end - start) / CLOCKS_PER_SEC); 74 while (p->next != NULL) { 75 tmp = p; 76 p = p->next; 77 free(tmp); 78 } 79 return 0; 80} 81 82

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

C言語/C++ 処理時間計測 入門 - ViVi

clock関数で時間計測はいいんですが、1sec以下の時間精度があんましよろしくない傾向にあるようです
ここにあるようにいくつか方法はあるようなので、いろいろ試してみてはどうでしょう

投稿2018/12/11 11:08

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

clock関数の精度云々の話はあるようですが、質問にあるmallocを除いた時間ということであれば現状のコードで問題ないと思います。
clock~clockの間にmallocがあるかないかくらいは、ご自分で作ったコードなんでしょうからわかると思うんですけどね。

投稿2018/12/12 00:36

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問