ボゴソートソースコードC言語#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define BUFSIZE 20
void init_array(int *array, const unsigned int array_size);
void bogosort(int *array, const unsigned int array_size);
int is_sorted(int *array, const unsigned int array_size);
void shuffle(int *array, const unsigned int array_size);
int main(void)
{
clock_t start, end;
int *array, repeat;
unsigned int array_size;
char buf[BUFSIZE];
double exec_time = 0;
printf("input array size:");
fgets(buf, sizeof(buf), stdin);
array_size = (unsigned int)atoi(buf);
printf("input number of executing:");
fgets(buf, sizeof(buf), stdin);
repeat = atoi(buf);
if((array = malloc(sizeof(int)*array_size)) == NULL)
{
fprintf(stderr, "Error:Mamory Allocation Fault.");
exit(1);
}
srand(time(NULL));
while(repeat > 0)
{
init_array(array, array_size);
start = clock();
bogosort(array , array_size);
end = clock();
exec_time += (double)(end - start)/CLOCKS_PER_SEC;
repeat--;
}
printf("Execution Time:%lf [sec.]\n", exec_time);
free(array);
return 0;
}
void init_array(int *array, const unsigned int array_size)
{
unsigned int n = array_size;
while(n > 0)
{
array[n-1] = rand();
n--;
}
}
void bogosort(int *array, const unsigned int array_size)
{
while(!is_sorted(array, array_size)) shuffle(array, array_size);
}
int is_sorted(int *array, const unsigned int array_size)
{
unsigned int n = array_size;
unsigned char sorted = 1;
while(n > 1)
{
if(array[n-1] < array[n-2]) sorted = 0;
n--;
}
return sorted;
}
void shuffle(int *array, const unsigned int array_size)
{
unsigned int n = array_size, k, tmp;
while(n > 1)
{
k = rand()%n;
n--;
tmp = array[n];
array[n] = array[k];
array[k] = tmp;
}
}
実行結果
より大きな要素数
2009/03/17 05:00 |
プロフィール
2009年03月
最近の記事
Extension:DynamicPageList3 (DPL3), version 3.5.2: Error: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants アーカイブ
Extension:DynamicPageList3 (DPL3), version 3.5.2: Error: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants YouTube
日記を書く <createbox> width=20% preload=Make/Dialy prefix=Alpha 1/ボゴソート/ buttonlabel=作る </createbox> 注意:トップページからのみ日記を作成してください。他のページから作ると記事空間がおかしくなります。 |