アプリ版:「スタンプのみでお礼する」機能のリリースについて

クイックソートの処理速度に関する実験
要素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;
}

A 回答 (4件)

そもそも、



>#define ASIZE 10000
>int i,a[ASIZE];

このコードで、

>要素1万個、2万個、3万個の配列変数にランダムな値を代入

この仕様に対応できているのでしょうか。

それから、乱数の種は、固定値ではなくて例えば時刻とかにするのが
一般的ではないか、と個人的には思います。あ、どうでもいい話か。
    • good
    • 0

qsort が「クイックソート」であるという保証はどこにもありません>#2.

    • good
    • 0

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の実装
 ここまで来ればお分かりでしょうから、
 あとは書きません。
 尚、データ形式が合わないとコンパイルで
 エラーとなるので、適宜キャストしてあげる
 必要があります。

コンパイラは何をお使いか分かりませんが、
日本語のシンボルが使えるものの場合は
できるだけ日本語シンボルを使うべきだと
考えます。
    • good
    • 0

「クイックソートをする」プログラムを入れてください.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!