Sortieralgorythmus mit C++

Gast #296162
Hallo,
ich bin gerade dabei ein Programm zu schreiben welches mir vorher
eingegebene Zahlen von der kleinsten bis zur größten sortiert und die
sortierte Reihe dann ausgiebt. Also das Einlesen ins Array und das
Ausgeben bekomme ich hin. Aber wie genau kann ich die Reihe intern
sortieren? PS: Dies sollte auf jeden fall rekursiv und nicht über die
Funktion Bubble gelößt werden. Ich hoffe mir kann vielleicht einer
weiterhelfen.
#296163
Da du von Array im Zusammenhang mit C++ sprichst gehe ich davon aus,
dass du std::vector meinst. In dem Fall würde ich mir mal
http://www.sgi.com/tech/stl/sort.html ansehen. Schneller bekommt man es
kaum hin, falls der Sortieralgorithmus einigermaßen allgemein bleiben
soll.
Es gibt auch noch stable_sort, das die Reihenfolge "gleicher"
Elemente gleich lässt, aber für Zahlen brauchst du das nicht (nur
merken, dass es das gibt, falls du es mal brauchst).

Falls du dich für Sortier-Algorithmen interessierst, könntest du z.B.
bei Wikipedia vorbeischauen: Mergesort, Insertion Sort, Quicksort sind
keine schlechten Stichworte.

p.s.: std::sort funktioniert übrigens auch mit einem gewöhnlichen
(C-)Array, aber wieso solltest du das unter C++ benutzen?
#296164
"PS: Dies sollte auf jeden fall rekursiv und nicht über die
Funktion Bubble gelößt werden."


Wunderbares Statement !

Rekursionen haben auf MCs den Nachteil, daß sie viel SRAM benötigen und
daß sie viel Rechenzeit mit CALL, RET, PUSH, POP verbrauchen.


Wenn Dein Code also möglichst langsam sein soll und viel SRAM belegen
soll, dann sind Rekursionen genau das richtige Mittel.

Hast Du allerdings andere Prämissen, kann ich Dein Beharren auf
Rekursion nicht nachvollziehen.


Ich wähle Algorithmen jedenfalls immer nach Effizienz aus (Code-Größe,
SRAM-Bedarf, Geschwindigkeit).


Peter
Gast #296165
Irgendwie sehr verdächtig:

Klingt für mich nach einer mega typischen SW-Hausaufgabe für angehende
Ingenieure...

Sich selber den Kopf zerbrechen, bringt den grössten Lerneffekt. Oder
gehörst Du zu den Schmarotzern, die sich ein Leben lang auf Kosten
anderer durchs Leben mogeln?

Gruss Peter
#296169
> Sie sind nur sehr elegant und einfach zu programmieren.

Nicht nur das. Zum Beispiel wird tail recursion (
http://de.wikipedia.org/wiki/Endrekursion , als einfachstes Beispiel)
beim Kompilieren ziemlich sicher in eine iterative Version umgewandelt.
Andere Sprachen wie Scheme schreiben das sogar vor, damit sich ein
Compiler "standardkonform" nennen darf.
Möglicherweise erkennen aktuelle C-Compiler auch komplexere
Situationen, bei denen sich Rekursion im Maschinencode einfach in
Iteration umwandeln lässt. Getestet habe ich das noch nicht, habe aber
newsgroup-Postings in der Richtung gelesen (in news://comp.lang.c
z.B.).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.