バブル、クイックソートの実行時間測定
Posted: 2007年6月15日(金) 08:53
初めまして。
学校ので、バブルソートとクイックソートの実行速度の比較が課題になっているのですが
ランダムで同数の配列を用いているのに
クイックソートの測定時間が不安定で、たいていの場合バブルより遅いんです。
配列数をコマンドで変えてるのですがクイックの方は配列が10倍になったのに
測定時間が減っていたりしました。
ソート自体は出来ていたので
実行時間を測定するプログラムがおかしいのは確かなのですが。
以下はクイックソートのプログラムです
追記ですが
クイックソートプログラムアプリを起動しようとしましたがexeファイルが見つかりません…
学校ので、バブルソートとクイックソートの実行速度の比較が課題になっているのですが
ランダムで同数の配列を用いているのに
クイックソートの測定時間が不安定で、たいていの場合バブルより遅いんです。
配列数をコマンドで変えてるのですがクイックの方は配列が10倍になったのに
測定時間が減っていたりしました。
ソート自体は出来ていたので
実行時間を測定するプログラムがおかしいのは確かなのですが。
以下はクイックソートのプログラムです
#include<stdio.h> #include<sys/time.h> #include<stdlib.h> #include<time.h> #ifndef MAX #define MAX 25 #endif /*外部関数宣言*/ extern void set_data_t3(int data[/url],int num); extern void show_data(int data[/url],int num); extern void swap_data(int data[/url],int i,int j); /*内部関数*/ void quick_sort(int data[/url],int num); void quick_sort_f(int data[/url],int l,int r); int part(int data[/url],int l,int r); int main() { int data[MAX]; set_data_t3(data,MAX); struct timeval start,stop,duration; struct timezone JPN; JPN.tz_minuteswest=-9*60; JPN.tz_dsttime=0; if(gettimeofday(&start,&JPN)!=0){ fprintf(stderr,"err\n"); return -1; } time_t start_sec,stop_sec,dura_sec; if(time(&start_sec)==(time_t)-1){ fprintf(stderr,"err\n"); return -1; } quick_sort(data,MAX); if(gettimeofday(&stop,&JPN)!=0){ fprintf(stderr,"err\n"); return -1; } if(time(&stop_sec)==(time_t)-1){ fprintf(stderr,"err\n"); return -1; } dura_sec =stop_sec - start_sec; duration.tv_usec=stop.tv_usec-start.tv_usec; fprintf(stdout,"%f \n",dura_sec); fprintf(stdout,"%x microseconds\n",duration.tv_usec); return 0; } /*他ソートと合わせるための関数*/ void quick_sort(int data[/url],int num) { quick_sort_f(data,0,num-1); } /*クイックソート実体↓*/ void quick_sort_f(int data[/url],int l,int r) { int v; if(l>=r){ return; } v=part(data,1,r); quick_sort_f(data,1,v-1); quick_sort_f(data,v+1,r); } int part(int data[/url],int l,int r) { int i,j,pivot; i=l; j=r-1; pivot=data[[/url]; for(;;){ while(data<pivot) i++; while((i<j)&&(pivot<=data[j])) j--; if(i>=j) break; swap_data(data,i,j); } swap_data(data,i,r); return i; }
追記ですが
クイックソートプログラムアプリを起動しようとしましたがexeファイルが見つかりません…