バブル、クイックソートの実行時間測定
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ファイルが見つかりません…