我的任務是讀取一個文件,並對其進行排序,全部使用單個鏈接列表。我實現了合併排序,但是測試系統說它對大文件太慢了。我怎樣才能優化這個?鏈接列表合併排序太慢
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