ソート時間の計測は以下のようにすると正しく計測できるでしょうか?(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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。