- 締切済み
クイックソートの処理速度に関する実験 要素1万個、
クイックソートの処理速度に関する実験 要素1万個、2万個、3万個の配列変数にランダムな値を代入し、・その後クイックソートで小さい順に並べ替える #include<stdio.h> #include<stdlib.h> #include<time.h> #define ASIZE 10000 #define RAND_SEED 0x1131000 void my_sort(int left, int right, int a[]); int main(void){ clock_t start, end; int i,a[ASIZE]; srand(RAND_SEED); for(i=0;i<ASIZE; i++){ a[i]=rand(); } start=clock(); my_sort(0, ASIZE-1, a); end=clock(); printf("%.3f秒でした" ,(end-start)/(double)CLOCKS_PER_SEC); getchar(); return 0; } void my_sort(int left, int right, int a[]){ ここに入れるプログラムがわかりません return; }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6289)
そもそも、 >#define ASIZE 10000 >int i,a[ASIZE]; このコードで、 >要素1万個、2万個、3万個の配列変数にランダムな値を代入 この仕様に対応できているのでしょうか。 それから、乱数の種は、固定値ではなくて例えば時刻とかにするのが 一般的ではないか、と個人的には思います。あ、どうでもいい話か。
- Tacosan
- ベストアンサー率23% (3656/15482)
qsort が「クイックソート」であるという保証はどこにもありません>#2.
- nda23
- ベストアンサー率54% (777/1415)
C言語のqsortを見ましたか? 次のように説明があるはずです。 void qsort( void *データ配列, unsigned int 要素数, unsigned int 1要素の大きさ, int (*大小判定関数)( void *要素1,void *要素2) ) 掲題の例では以下のようになります。 データ配列 = a 要素数 = right - left 1要素の大きさ = sizeof(int) 大小判定関数 → 自作 (1)最初に大小判定関数の事前定義が 必要です。 int 大小判定関数(const void *,const void *); (2)大小判定関数の実装 static int 大小判定関数(const void *要素1, const void *要素2) { //要素1 < 要素2 なら負の値を返す if ( *((int *)要素1) < *((int *)要素2) ) return -1; //要素1 > 要素2 なら正の値を返す if ( *((int *)要素1) > *((int *)要素2) ) return 1; //要素1 == 要素2 なら0を返す return 0; } (3)my_sortの実装 ここまで来ればお分かりでしょうから、 あとは書きません。 尚、データ形式が合わないとコンパイルで エラーとなるので、適宜キャストしてあげる 必要があります。 コンパイラは何をお使いか分かりませんが、 日本語のシンボルが使えるものの場合は できるだけ日本語シンボルを使うべきだと 考えます。
- Tacosan
- ベストアンサー率23% (3656/15482)
「クイックソートをする」プログラムを入れてください.