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
|
Verfasst am: 18.05.2005, 08:24 Titel: Halbwegs flinker Sortieralgorithmus |
|
|
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 |
|
 |
Nahar Senior JLI'ler
Alter: 37 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 18.05.2005, 08:53 Titel: |
|
|
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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 18.05.2005, 14:21 Titel: |
|
|
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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 37 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 18.05.2005, 14:49 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 18.05.2005, 14:53 Titel: |
|
|
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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 37 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 18.05.2005, 14:59 Titel: |
|
|
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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 18.05.2005, 15:04 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 18.05.2005, 15:32 Titel: |
|
|
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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 37 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 19.05.2005, 15:34 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 19.05.2005, 16:58 Titel: |
|
|
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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 37 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 19.05.2005, 19:14 Titel: |
|
|
Werd ich tun.
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 |
|
 |
|