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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

1487閲覧

C言語のclock関数を使うバブルソートクイックソートについて

i_i_i

総合スコア2

C

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/05/24 06:51

前提・実現したいこと

バブルソート時間=
クイックソート時間=
というように=の後ろを求めたいです。
//(4)の部分の下数行のどこかが間違ってると自分は思います。
プログラム実行時間のやり方がわからないので//(4)の下を正しいソースコードを教えていただけると嬉しいです。

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

バブルソート時間だけでクイックソート時間が現れない、詳しい説明は実現したいことを見てください

該当のソースコード

//実験2-2以降用 #include<stdio.h> #include<time.h> #include <stdlib.h> #define MAXRAND (1000) //乱数の個数 実験2-2では67 実験2-3以降では指示に従って変更すること long sn[2]={0}; //要素の入れ替え回数のカウント用配列 //sn[0]がバブルソート用 //sn[1]がクイックソート用 // プロトタイプ宣言 void printData(int *a); //数値列を出力する関数 void swap(int *x, int *y); //要素同士の入れ替えを行う関数 void bubbleSort(int *a); //バブルソートを行う関数 void quickSort(int *a, int first, int last); //クイックソートを行う関数 int main(void){ int randArray[MAXRAND]; /*乱数候補収納用変数*/ int i; //ループカウンタ用変数 int numRand; //残り乱数候補数 int randID; //乱数候補取得用変数 int bubble[MAXRAND]; //バブルソート用配列 int quick[MAXRAND]; //クイックソート用配列 srand(time(NULL)); //あらかじめ配列に数値を代入 for(i=MAXRAND-1;i>=0;i--){ bubble[i] = quick[i] = MAXRAND - i; } //並び替え前のデータを作成(数値の重複を回避しつつ) //35~41,43,44行目削除済み for (i = 0; i < 100; i++) bubbleSort(bubble); //バブルソートの実行 for (i = 0; i < 100; i++) quickSort(quick, 0, MAXRAND - 1); //クイックソートの実行 //(4)の部分 clock_t start; clock_t end; int n = 0; start = clock(); for (i = 0; i < 100000; i++) n *= i; end = clock(); printf("バブル実行時間=%10.30f\n", ((double)(end - start)) / CLOCKS_PER_SEC); printf("\n要素同士を入れ替えた回数\n"); printf("バブルソート :%ld回\n", sn[0]); //long型を表示するために%ld printf("クイックソート:%ld回\n", sn[1]); } //数値列を出力する関数 void printData(int *a){ int i; for(i=0;i<MAXRAND;i++){ printf("%3d ",a[i]); if (i%10==9) putchar('\n'); } putchar('\n'); } //要素同士の入れ替えを行う関数 void swap(int *x, int *y){ int t=*x; *x=*y; *y=t; } //バブルソートを行う関数 void bubbleSort(int *a){ int i,j; for (i=MAXRAND-1;i>=0;i--){ for (j=0;j<i;j++){ if (a[j]>a[j+1]){ swap(&a[j],&a[j+1]); sn[0]++; } } } } //クイックソートを行う関数 void quickSort(int *a,int first,int last) { int i,j,x; //xは基準値 i=first; j=last; x=(a[i]+a[j])/2; //基準値は平均(これを元の状態とする) while (1) { while (a[i]<x) i++; while (a[j]>x) j--; if (i>=j) break; //ぶつかった swap(&a[i],&a[j]); sn[1]++; i++; j--; } if (first<i-1) quickSort(a,first,i-1); if (j+1<last) quickSort(a,j+1,last); }

試したこと

clock関数を調べたがわからなかったです;;

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

C言語 VisualStudio

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

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

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

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

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

guest

回答1

0

ベストアンサー

cpp

1 clock_t bubble_start = clock(); 2 for (i = 0; i < 100; i++) bubbleSort(bubble); //バブルソートの実行 3 clock_t bubble_end = clock(); 4 printf("バブルソート実行時間=%10.30f\n", ((double)(bubble_end - bubble_start)) / CLOCKS_PER_SEC); 5 6 clock_t quick_start = clock(); 7 for (i = 0; i < 100; i++) quickSort(quick, 0, MAXRAND - 1); //クイックソートの実行 8 clock_t quick_end = clock(); 9 printf("クイックソート実行時間=%10.30f\n", ((double)(quick_end - quick_start)) / CLOCKS_PER_SEC);

こんな感じで計測したい処理を囲ってやるべきです。質問文のコードだと謎のループを計測していますね。

投稿2020/05/24 07:02

編集2020/05/24 07:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問