Моя задача - прочитать файл и отсортировать его, используя одноуровневый список. Я реализовал сортировку слияния, но система тестирования говорит, что она слишком медленная для больших файлов. Как я могу это оптимизировать?Слияние сортировки для связанного списка слишком медленно
void merge_sort(list *a, list *tmp, int n) {
int k, i, rcount;
list *cursor, *l, *r, *end;
k = n/2;
if(n == 1) {
return;
}
l = a;
end = list_get(a, k);
r = end;
merge_sort(a, tmp, k);
merge_sort(r, tmp, n - k);
rcount = k;
for(cursor = tmp, i = 0; i < n; cursor = cursor->next, i++) {
if((l != end) && (((rcount == n) || (strcmp(l->value, r->value) < 0)))) {
cursor->value = l->value;
l = l->next;
} else {
cursor->value = r->value;
r = r->next;
rcount++;
}
}
for(cursor = tmp, i = 0; i < n; cursor = cursor->next, a = a -> next, i++) {
a->value = cursor->value;
}
return;
}
Первое, что приходит мне на ум: вместо этого использовать quicksort. – nonchip
Вы можете просто поиграть с указателями вместо копирования значений. Это связанный список в конце концов ... – Shloim