EDDY 2014-01-20 17:44:09 |
通報 |
/* バケットソート */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 2000000 /* 要素の最大数 */
#define M 30 /* バケットの個数 */
int main(void) {
int element[MAX+1];
int B[M+1];
clock_t before, after; /* プログラムで使われたプロセッサ時間を返す */
int i,j;
int num; /* 要素数の変数 */
srand(getpid());
printf("要素数:");
scanf("%d", &num);
for(i=1; i<= num; ++i) /* 要素の初期設定 */
element[i]= i;
before = clock(); /* 処理開始時のプロセッサ時刻を取得 */
/* ソーティング */
for(i=0; i<=M; ++i) B[i]=9999999; /* バケットの準備 */
for(i=1; i<=num; ++i) B[element[i]]=element[i]; /* 要素を放り込む */
j=0;
for(i=0; i<=M; ++i) {
if(B[i]!=9999999) {++j; element[j]=B[i];}
};
after = clock(); /* 処理終了時のプロセッサ時刻を取得 */
printf("%f\n", (float)(after - before)/CLOCKS_PER_SEC);
/* (アルゴリズムに要した時間)=(処理後の時刻)-(処理前の時刻) */
/* clock()/CLOCKS_PER_SECは秒で表された時間 */
/* 結果の表示 */ /*
for(i=1; i<=N;++i) printf("%4d",element[i]);
printf("\n");
*/
return 0;
}
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 180000 /* 要素の最大数 */
#define M 9 /* バケットの個数(基数)-1 */
#define D 6 /* 要素の最大桁-1 */
int ipow10(int n)
{
int i,i10;
i10=1; for(i=1; i<=n; ++i) i10*=10;
return(i10);
}
int main(void) {
int element[MAX+1];
int A[M+1][MAX+1]={0,0};
int P[M+1]={0};
clock_t before, after; /* プログラムで使われたプロセッサ時間を返す */
int i,j,k,l,e;
int num; /* 要素数の変数 */
srand(getpid());
printf("要素数:");
scanf("%d", &num);
for(i=1; i<= num; ++i) /* 要素の初期設定 */
element[i]=rand();
before = clock(); /* 処理開始時のプロセッサ時刻を取得 */
/* ソーティング */
/* 最下位桁よりバケットソートを行う */
for(i=0; i<=D; ++i){
for(j=0; j<=M; ++j) P[j] = 0; /* バケットの準備 */
for(j=1; j<=num; ++j){
e=element[j]/ipow10(i); e%=10; /* e:A[j]の10^iのくらいの桁 */
A[e][P[e]] = element[j]; ++P[e]; /* 要素を放り込む */
}
k=0;
for(j=0; j<=M; ++j){
if(P[j]>0) for(l=0; l<P[j]; ++l){
++k; element[k] = A[j][l];
}
}
}
after = clock(); /* 処理終了時のプロセッサ時刻を取得 */
printf("%f\n", (float)(after - before)/CLOCKS_PER_SEC);
/* (アルゴリズムに要した時間)=(処理後の時刻)-(処理前の時刻) */
/* clock()/CLOCKS_PER_SECは秒で表された時間 */
/*結果の出力
for(j=1; j<=num; ++j)
printf("%d ",A[j]);
printf("\n");
*/
return 0;
}
トピック検索 |