Sortieralgorithmen, die ihre Arbeit zusammenfassen



  • Hallo Forum,

    ich möchte ein kleines Programm schreiben, dass verschiedene Sortieralgorithmen vergleicht.
    Dazu sollten nach der Sortierung Daten wie Anzahl der Vergleiche oder Anzahl der Vertauschungen usw. vorliegen.
    Gibt es eine Bibliothek, die Sortierungen nach verschiedenen Algorithmen ermöglicht und die hinterher auch Auskunft über ihre Arbeit gibt?
    Wenn nicht, dann muss ich wohl selbst so etwas schreiben.

    Danke schon im voraus



  • Erstell doch eine Klasse, die in ihren Operatoren die Aufrufe zählt.

    class Tester
    {
    public:
    
    	Tester &operator = (const Tester &rhs)
    	{
    		++ms_assignments;
    		return *this;
    	}
    
    private:
    
    	static size_t ms_assignments;
    };
    


  • ok das ist wohl tatsächlich das leichteste^^
    danke

    noch eine frage: kennt jemand ne lib, in der verschiedene sortieralgos angeboten werden?
    dann müsst man se nicht selbst schreiben 😉



  • Unter http://www.sortieralgorithmen.de/ gibt es Pseudo-Code zu vielen Sortieralgorithmen (einfach mal durchklicken -)
    Die meisten lassen sich also einfach in C++ umschreiben.



  • daersc schrieb:

    noch eine frage: kennt jemand ne lib, in der verschiedene sortieralgos angeboten werden?

    die meisten C++-Implementierungen bieten

    Introsort (eine Quicksortvariante) als std::sort
    Mergesort als std::stable_sort
    Heapsort via std::make_heap und std::sort_heap

    Damit deckst Du ja schonmal ne ganze Menge ab. 😉



  • TyRoXx schrieb:

    Erstell doch eine Klasse, die in ihren Operatoren die Aufrufe zählt.

    class Tester
    {
    public:
    
    	Tester &operator = (const Tester &rhs)
    	{
    		++ms_assignments;
    		return *this;
    	}
    
    private:
    
    	static size_t ms_assignments;
    };
    

    hm? ich würde eher die zeit messen, das mit den operatoren find ich nicht so schön, es zählt ja keine function calls mit und verhindert die ein oder ander optimierung, wobei ja dann alle gleich schlechter würden...
    also würd ich das nochmal überdenken und am einfachsten ein großes array nehmen,

    1. mischen
    2. start zeit nehmen
    3. sortieren
    4. stop zeit - start zeit = end zeit

    und davon mehrere durchläufe damit man ein repräsentatives ergebnis hat...

    lg lolo



  • noobLolo schrieb:

    hm? ich würde eher die zeit messen, das mit den operatoren find ich nicht so schön, es zählt ja keine function calls mit und verhindert die ein oder ander optimierung, wobei ja dann alle gleich schlechter würden...

    Wie du das findest, ist völlig egal, meine Lösung macht das, was gefragt war:

    daersc schrieb:

    Dazu sollten nach der Sortierung Daten wie Anzahl der Vergleiche oder Anzahl der Vertauschungen usw. vorliegen.

    Und wieso sollte das Optimierungen verhindern?



  • TyRoXx schrieb:

    noobLolo schrieb:

    hm? ich würde eher die zeit messen, das mit den operatoren find ich nicht so schön, es zählt ja keine function calls mit und verhindert die ein oder ander optimierung, wobei ja dann alle gleich schlechter würden...

    Wie du das findest, ist völlig egal, meine Lösung macht das, was gefragt war:

    daersc schrieb:

    Dazu sollten nach der Sortierung Daten wie Anzahl der Vergleiche oder Anzahl der Vertauschungen usw. vorliegen.

    finde ich auch,
    ich wollte nämlich tatsächlich wissen, wie oft die operationen aufgerufen wurden.
    die zeit wird natürlich auch gemessen 😉
    danke trotzdem


Anmelden zum Antworten