2017-05-08 1 views
2

Ich lerne OOP, also muss ich mit Arrays interagieren, nicht verknüpfte Liste. Ich habe Daten sortiert. Das Problem ist, ein Mitglied des Arrays zu löschen (nennen wir es DL). Die erste Methode, die ich entwickelte, war Daten zu überschreiben i+1 zu i beginnend mit DL Index und verringern Sie die Menge der Lesung von 1. Später fand ich heraus, dass ich die DL mit dem letzten Mitglied tauschen und dann die Zählvariable um 1 verringern kann Aber ich muss die Daten erneut sortieren. Also welches ist besser?Was ist der beste Weg, um ein Array-Mitglied zu löschen?

+0

Wie groß sind die Arrays? Welche Art von Daten sind in ihnen? Kann es gemerkt werden? Haben Sie darüber nachgedacht, beides zu versuchen und zu profilieren? –

+4

Ich bin so sehr müde von diesem zufälligen Downvoting von Posts, die es anscheinend nicht brauchen. Er stellte eine vollkommen gültige Frage, keine Notwendigkeit, darüber gemobbt zu werden. –

+0

Meine Schuld, Trung, erkannte ich (verspätet), dass es wahrscheinlich das "Lernen" war, das dazu führte, dass Sie verknüpfte Listen diskontieren, nicht etwas, das OOP innewohnt - ich habe meinen Kommentar entfernt. – paxdiablo

Antwort

3

Wenn es sortiert bleiben muss, würde ich sagen, es ist besser, es zu überschreiben, indem Sie jedes Element nach dem Ziel zurück verschieben. Das Swappen mit dem Endelement und anschließendes Umsortieren würde mehr Arbeit erfordern, da ein Swap drei Aktionen benötigt:

1) Kopieren von Element eins in eine temporäre Variable. 2) Kopieren von Element zwei zu Element eins. 3) Kopiert das temporäre Element in Element zwei.

Und das muss mehrmals in einem Sortieralgorithmus wiederholt werden. Und wenn Sie mit einem Array von Objekten einer Struktur oder Klasse mit mehreren privaten Datenelementen arbeiten, erhöht sich die Arbeitslast noch mehr.

Die Überschreibungs nimmt weniger bewegt pro Iteration:

1) i + 1-i Kopieren.

Also, definitiv gehen mit dem Überschreiben, indem Sie alle Elemente zurück eins und abnehmende Anzahl um eins.

In jedem Fall ist es wahrscheinlich am besten, beide mit Ihrem spezifischen Datensatz zu synchronisieren und zu sehen, welcher schneller ist. Dies ist sehr einfach, indem Sie die Millisekunden zwischen Start und Ende Ihrer Implementierung zählen.

0

"Besser" ist ein sehr subjektiver Begriff und welcher ist geeigneter (für welche Definition Sie auch wählen) hängt sehr von der Art von Datensätzen ab, über die Sie sprechen (Größe, usw.).

Aber ich werde das erwähnen, die relativen Zeitkomplexitäten von Array Shuffle und die meisten "regulären" Sortierungen sind O(n) bzw. O(n log n).

Das bedeutet, dass der Shuffle in den allermeisten Fällen wahrscheinlich schneller ist.

+0

Danke, ich habe den Titel editiert. –

Verwandte Themen