У меня проблема с сортировкой пузырей большими данными. Это задание, и мой учитель явно сказал использовать сортировку пузырьков для сортировки этих больших данных. Я попробовал работать в небольшом файле, и он работает отлично, но у него проблемы с отображением чего-либо для большого файла. Я не знаю, в чем проблема. Я тоже должен использовать пузырь. Спасибо. Ниже представлен небольшой файл «small.txt». Большой файл «big.txt» здесь подходит, он содержит тысячи строк, но тот же формат, что и маленький файл, и моя программа приведена ниже: я ждал 1 час для вывода чего-либо, и программа все еще находится в прогресс для большого файла.Сортировка пузырьков не работает для большого файла, но он работает для небольшого файла
small.txt
FORD 2001
NISSAN 2000
JAYCO 2003
Программа
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *read;
char lines[110000];
int i=0, c, j,a;
char *make[111100];
char *year[111100], *swapyear, *swapmake;
if((read = fopen("big.txt", "r")) == NULL)
{
printf("can't open %s\n", "big.txt");
exit(1);
}
c=0;
while(fgets(lines, sizeof(lines), read)!=NULL){
make[c] = strdup(strtok(lines, " "));
year[c] = strdup(strtok(NULL, " "));
c++;
}
for(j=0; j<c-1; j++){
for(a=0; a<(c-j-1); a++){
if(atoi(year[a]) > atoi(year[a+1])){
swapyear = year[a];
swapmake = make[a];
year[a] =year[a+1];
make[a] = make[a+1];
year[a+1] = swapyear;
make[a+1] = swapmake;
}
}
}
for(j=0; j<=(c-1); j++)
{
printf("%s %s\n", make[j], year[j]);
}
}
Возможно, проблема в том, что просто пузырьковая сортировка занимает очень много времени, и ваша программа просто не заканчивая. –
Сообщения об ошибках важны: 'char * path =" usorted.txt "; if ((read = fopen (путь, "r")) == NULL) {perror (путь);} ' –
Просто fyi, ваш пузырь сортировки ... нет. У вас нет swap-обнаружения. И вы должны преобразовывать год в 'int' во время чтения файла, сохраняя его в собственном массиве' int', а не многократно повторяя преобразование atoi в одни и те же данные снова и снова (и более) еще раз. – WhozCraig