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

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

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

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

Q&A

解決済

2回答

309閲覧

#include <time.h>を用いて選択ソートの並べ替えの処理部分のみを計測するプログラムについて

itumaki

総合スコア12

C

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

0グッド

0クリップ

投稿2019/07/30 05:38

前提・実現したいこと

選択ソートの処理時間(計算時間)を計測し、実験するというものです。計測には、#include <time.h>を用いて計測します。

発生している問題・エラーメッセージ

先生から、「ソート処理の部分のみ」を計測してほしい、end = clock();の位置が間違っている。並べ替えの処理部分のみを計測してください。とのことでした。 start = clock();の位置は指摘されていないので間違っていないと思います。

該当のソースコード

#include<stdlib.h> #include <time.h> #define SIZE 100000 void output( int data[], int size ) { int i; for( i = 0; i < size ; i++ ) { printf("%d, ", data[i]); } printf("\n"); } int main (void) { int data[SIZE]; int size = SIZE; int seed; printf("Seed?="); scanf("%d", &seed); srand(seed); int i,j; int n; for( i = 0; i < size ; i++ ){ data[i] = rand()%100+1; } unsigned long int start; unsigned long int end; unsigned long int elapsed; output( data, size ); int i,j; int min; int k,n; start = clock(); for(i=0; i<size-1; i++) { min = data[i]; k = i; for(j =i+1; j < size ; j++) { if(min > data[j]){ min = data[j]; k = j; } } n = data[i] ; data[i] = data[k]; data[k] = n; end = clock(); elapsed = end - start; } output( data, size ); /*計測結果の出力*/ printf("START TIME:%lu\n",start); printf("END TIME:%lu\n",end); printf("ELAPSED TIME:%lu\n",elapsed); return 0; }

試したこと

アルゴリズムをみてこのようにしてみたのですが、ダメみたいでした。自分でも、end = clock(); の前で入れ替えているのでここだと思っていたのですが、、、、

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

先生が言いたかったのはこういうことじゃないですか?

c

1 start = clock(); 2 3 for(i=0; i<size-1; i++) 4 { 5 min = data[i]; 6 k = i; 7 8 for(j =i+1; j < size ; j++) 9 { 10 () 11 } 12 () 13 } 14 end = clock(); 15 elapsed = end - start;

投稿2019/07/30 05:46

KoichiSugiyama

総合スコア3041

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

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

0

どこの時間を測定するか以前の問題として、現在のendの取得位置がループの中なので、1回の実行につき何度もclock()を呼び出してしまいます。

投稿2019/07/30 05:42

maisumakun

総合スコア145121

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問