JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Halbwegs flinker Sortieralgorithmus

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 37
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 08:24    Titel: Halbwegs flinker Sortieralgorithmus Antworten mit Zitat

Hallo.

Ich habe eine List mit Dingen und will sie sortieren.

In Info haben wir das so gemacht:
Code:

for(long a=0; a<Num; a++)
{
    for(long b=0; b<Num-1; b++);
    {
         if(List[b]>List[b+1])
             Vertauschen(List[b], List[b+1]);
    }
}


Das ist arschlahm... hier haben wir Num*(Num-1) Durchläufe...also Num²-Num...viel zu viel.

Ich hab ein bisschen überlegt und kam darauf...
Code:

for(Jedes neue Element)
{
     for(long a=0; a<AktuelleAnzahlElemente; a++)
     {
         if(neuesElement>Liste[a])
         {
              Liste.Einsetzen(neuesElement, a);  // vor a einsetzen
              break;
         }
     }
}


Hier haben wir 1+2+3+4+...+(Num-2)+(Num-1)+Num Durchläufe... das sind immerhin Num²/2.0f. Hmm.
Ist mir aber noch zu aufwändig.
Weiß jemand wie ich das flotter hinkriege, mit der std::list oder von mir aus auch nem Vektor?
Danke.[/code]
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Nahar
Senior JLI'ler


Alter: 37
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 08:53    Titel: Antworten mit Zitat

Wie aufwändig (vom Code her) soll/darf/kanns den sein?

Und für was exakt brauchst du es?Nur für pures Vektorensortieren wie in deinem Bubblesort (so nennt man den Algi den du gepostet hast) Beispiel, oder für komplexere Aufgaben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 14:21    Titel: Antworten mit Zitat

Du kannst dir mal sort anschauen das sollte mit jeder STL-Klasse funktionieren oder std::set.

Schau mal ob du das Buch "Die C++ - Standardbibliothek" kriegst. Ich fands ziemlich umfassend und hilfreich.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 37
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 14:49    Titel: Antworten mit Zitat

Es soll so schnell wie möglich, also mit möglichst wenig Durchlaufen funktionieren. Ich brauchs zum Sortieren von Objekten der Distanz nach.

Peacekiller: std::list::sort kapier ich net. Ich hab eine Struktur mit 3 Elementen, und wills nach einem von diesem sortieren. Deshalb muss ichs vermutlich manuell machen...
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 14:53    Titel: Antworten mit Zitat

CPP:
#include <iostream>
#include <string>
#include <algorithm> 

class item 

public:
    item (const std::string& name_) : name(name_) {};
    ~item (void) {}

    std::string name; 
    unsigned int arguments; 
};
 
 
bool const ssss (const item& left, const item& right) 

    if (left.name<right.name) return (true); 
    if (left.name>right.name) return (false); 

    return (false); 

 
int main (void)
{
    std::vector<item> items_vec;

    items_vec.push_back(item("hallo2"));
    items_vec.push_back(item("hallo"));
    items_vec.push_back(item("mamaaaaa"));
    items_vec.push_back(item("hallo63"));
    items_vec.push_back(item("hallo44"));
    items_vec.push_back(item("arschilochi"));

    std::sort(items_vec.begin(),items_vec.end(), ssss);

    for (int i=0; i<items_vec.size(); ++i)
    {
        std::cout<<items_vec[i].name.c_str() << std::endl;
    }
 
    std::cin.get();
 
    return 0;
}


Du musst nur ssss nach deinen Spezifikationen anpassen.

Achtung: für std::list funktioniert std::sort nicht! Dafür benutzt man std::list::sort
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 37
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 14:59    Titel: Antworten mit Zitat

Ahh, das hab ich kapiert. Wenn das noch schneller ist als mein Num²/2, dann freu ich mich.

Also ist ssss eine Funktion die jedesmal aufgerufen wird? Aus std::sort heraus?

THX
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 15:04    Titel: Antworten mit Zitat

Ja! und der Zeitaufwand steigt AFAIK logarithmisch.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 15:22    Titel: Antworten mit Zitat

Quicksort ist fast immer die erste Wahl:
http://zfx.info/Tutorials.php?ID=79
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 18.05.2005, 15:32    Titel: Antworten mit Zitat

Leider ist Quicksort die 1. Wahl, und dann geht die Heulerei los weil der Speicher net ausreicht! Besser einen Insertion Sortieralgo ausführen oder bei std::sort bleiben.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 37
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 19.05.2005, 15:34    Titel: Antworten mit Zitat

Also, jetzt hab ich statt 10 Frames etwa 65. Bei etwa 500 Billboards. Da wäre mit n²/2 viel Rechenaufwnd nötig... Wie geht std::sort?
Is aber eigentlich egal, Hauptsache es ist schnell. Mein Kumpel meinte es wäre in asm optimiert.
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 19.05.2005, 16:58    Titel: Antworten mit Zitat

HomeLess_PunkDrummer hat Folgendes geschrieben:
Mein Kumpel meinte es wäre in asm optimiert.
Sag Deinem Kumpel mal das Zitat von Dieter Nuhr:
"Wenn man keine Ahnung hat..."

Da ist nichts mit Assembler optimiert, nirgendwo in der STL.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 37
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 19.05.2005, 19:14    Titel: Antworten mit Zitat

Werd ich tun. Very Happy

Und meiner Englischlehrerin das von Konrad Adenauer: "Kommunisten sind rotlackierte Faschisten."
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum