Ordinare un elenco stringa: spostare o scambiare solo gli elementi
-
20-09-2019 - |
Domanda
In Delphi / Pascal vorrei ordinare una TStringList in ordine alfabetico. Ma per questo scopo, posso usare solo i seguenti due metodi:
Move:. sposta una stringa da una posizione di indice a un'altra, spostando altre stringhe intorno come appropriato
Cambio:. scambia due stringhe nella lista, come individuati dalle loro posizioni di indice
Come potrei fare questo? Ho avuto l'idea di passare attraverso tutti gli elementi con un ciclo e per qualcosa di simile:
- lastFirstLetter: = Copia (CurrentItem, 1, 1)
- vai alla voce successiva
- currentFirstLetter: = Copia (CurrentItem, 1, 1)
- se ord (currentFirstLetter)
Quale sarebbe il modo più veloce per ordinare uno StringList con questi due metodi? Non posso usare il metodo di ordinamento e la proprietà ordinati per la strada.
Soluzione
metodi di spostamento / scambio sono tutto ciò che serve. Comunque hai un sacco di algoritmi tra cui scegliere! Date un'occhiata a questo sito (da una rapida ricerca su Google) per i confronti animati: http: //www.sorting- algorithms.com/
Credo che tutti questi algoritmi basta usare 'mossa', a parte mucchio e le quicksorts che utilizzano solo 'scambio'
Altri suggerimenti
Si dà due metodi:. (1) Swap e (2) Scambio
C'è un terzo metodo:
(3) Tenere un TList di puntatori per le corde e ordinare i puntatori.
Questo metodo lascerà tutte le corde dove sono e potrebbe essere più veloce.
Vedere la domanda: Miglior modo per ordinare un array in Delphi e risposta accettato di Barry Kelly, così come le altre risposte.