Hallo,
Sag' doch mal, was bei deinem ersten Code nicht hinhaut ?
Der sieht für mich nicht falsch aus ?!
Wenn du das schneller haben willst, dann wirds ein wenig kompliziert !
Du kannst beide Listen z.B. mit Quicksort sortieren, dann musst du nur noch folgendes machen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| List1 List2 aa ab ad ad ah bk bc de be df bk dt (Die sind also beide schon mit Quicksort NACH DEM ORDX-WERT sortiert worden.)
I1 := 0; I2 := 0; if Ordx(List1[I1])>Ordx(List2[I2]) then Inc(I2); if Ordx(List1[I1])<Ordx(List2[I2]) then Inc(I1); if Ordx(List1[I1])=Ordx(List2[I2]) then begin NewList.Add(List1[I1]); Inc(I1); Inc(I2); end; |
Dieser Algo wird bei großen StringListen sehr viel schneller sein, als deiner. Du brauchst allerdings noch eine Funktion "Ordx", die einen brauchbaren Zahlenwert für Strings herausgibt. Dieser Zahlenwert muss nur eindeutig sein, d.h. für jeden String gibt es GENAU EINEN ordx-Wert.
Schau dir doch mal die Delphi-Beispiele an.
Quick-Sort, Bubble-Sort usw.
unter: Borland\Delphi x\Threads\"irgendwas".dpr
findest du die gängigsten 3 Sortier-Algorythmen.
Mit Quicksort müsstest du ja Vor-sortieren
Viele Grüsse.