クイックソートの処理速度に関する実験 要素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;
}
投稿日時 - 2012-06-13 09:55:01
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(4)
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の実装
ここまで来ればお分かりでしょうから、
あとは書きません。
尚、データ形式が合わないとコンパイルで
エラーとなるので、適宜キャストしてあげる
必要があります。
コンパイラは何をお使いか分かりませんが、
日本語のシンボルが使えるものの場合は
できるだけ日本語シンボルを使うべきだと
考えます。
投稿日時 - 2012-06-13 10:38:03