Показать сообщение отдельно

  #5  
Старый 04.04.2010, 11:22
comichero92
Новичок
Регистрация: 29.03.2010
Сообщений: 6
С нами: 8484458

Репутация: 0
По умолчанию

Цитата:
Сообщение от Lewis Carroll  
Задача следующего плана:

составить программу, сравнивающую три вида сортировок (любые сортировки т.е. быстрая, пузырьком и т. д. все годятся) и выдающую в результате сколько времени было затрачено на сортировку массива данных. (желательный размер массива ~100 кб, чтобы разница во времени была очевидной)

язык C/C++

заранее благодарен.
хм... наверно что-то такое
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

void bubble(char *items, int count);
void shaker(char *items, int count);
void shell(char *items, int count);

int main(void)
{
	FILE *fp;
	FILE *s1;
	FILE *s2;
	FILE *s3;
	char s[255];
	time_t start, end;
	volatile long unsigned t;

	printf("read file");

	if((fp = fopen("mass.txt", "r")) == NULL) {
		printf(" : error.\n");
		exit(1);
	}

	printf(" : ok.\n\n");

	while(!feof(fp)) {
		fgets(s, 253, fp);
	}

	start = time(NULL);
	bubble(s, strlen(s));
	end = time(NULL);
	s1 = fopen("bubble.txt", "w");
	fputs(s, s1);
	printf("Bubble sort : ok.\n");
	printf("time: %f s.\n\n", difftime(end, start));

	start = time(NULL);
	shaker(s, strlen(s));
	end = time(NULL);
	s2 = fopen("shaker.txt", "w");
	fputs(s, s2);
	printf("Cocktail shaker sort : ok.\n");
	printf("time: %f s.\n\n", difftime(end, start));

	start = time(NULL);
	shaker(s, strlen(s));
	end = time(NULL);
	s3 = fopen("shell.txt", "w");
	fputs(s, s3);
	printf("Donald Lewis Shell sort : ok.\n");
	printf("time: %f s.\n\n", difftime(end, start));

	fclose(fp);
	fclose(s1);
	fclose(s2);
	fclose(s3);
	return 0;
}

// bubble sort
void bubble(char *items, int count)
{
	register int a, b;
	register char t;

	for(a = 1; a < count; ++a)
		for(b = count-1; b >= a; --b) {
			if(items[b-1] > items[b]) {
				t = items[b-1];
				items[b-1] = items[b];
				items[b] = t;
			}
		}
}

// cocktail shaker sort
void shaker(char *items, int count)
{
	register int a;
	int exchange;
	char t;

	do{
		exchange = 0;
		for(a = count-1; a >0; --a) {
			if(items[a-1] > items[a]) {
				t = items[a-1];
				items[a-1] = items[a];
				items[a] = t;
				exchange = 1;
			}
		}

		for(a = 1; a < count; ++a) {
			if(items[a-1] > items[a]) {
				t = items[a-1];
				items[a-1] = items[a];
				items[a] = t;
				exchange = 1;
			}
		}
	} while(exchange);
}

// Donald Lewis Shell sort
void shell(char *items, int count)
{
	register int i, j, gap, k;
	char x, a[5];

	a[0] = 9; a[1] = 5; a[2] = 3; a[3] = 2; a[4] = 1;

	for(k = 0; k < 5; k++) {
		gap = a[k];
		for(i = gap; i < count; ++i) {
			x = items[i];
			for(j=i-gap; (x < items[j]) && (j >= 0); j = j-gap)
				items[j+gap] = items[j];
			items[j+gap] = x;
		}
	}
}
p.s. размер сортируемых данных думаю сам изменишь
 
Ответить с цитированием