Hallo.
Ich habe eine Liste als Array, z.B.
[Arrayposition]. [Wert]
1. 1
2. 3
3. 5
4. 2
5. 4
6. 10
7. 8
8. 9
9. 7
10. 6
Ich habe nun eine Reihe von Definitionen/Bedingungen
6 > 3
4 > 2, 3 und 1
8 > 6 und 7
Wie kann ein Sortieralgorithmus aussehen, der das Array nach diesen
Definitionen sortiert(aber nicht mehr, so kann 5 durchaus nach der 8
kommen)?
Und mich auf Widersprüche hinweist.
PS: Zahlen als Wertigkeit, in Wahrheit sind es Wörter. Das heißt also
bspw.
"Wort1, Wort2 und Wort6 müssen immer vor Wort3 auftauchen" und "Wort8
muß vor Wort6 auftauchen"
Das kann dann zu
Wort1
Wort2
Wort8
Wort6
Wort3
oder zu
Wort1
Wort8
Wort2
Wort6
Wort3
oder zu
Wort2
Wort8
Wort1
Wort6
Wort3
usw.
führen, nicht aber bspw. zu
Wort2
Wort3
Wort1
Wort6
Wort8
Bei Rückfragen, diese stellen.
Im Prinzip kannst du einen der gängigen Sortieralgorithmen benutzen. Die
Vergleichsfunktion muss halt angepasst werden. Ich würde das über ein
Dictionary lösen. In dem Dictionary würden dann die Definitionen stehen.
Jede Definition sieht folgendermaßen aus: Zahl1, Zahl2, Relation.
Die Vergleichsfunktion kriegt zwei Zahlen und guckt im Dictionary,
welche größer ist. Ist kein passender Eintrag vorhanden, wird einfach
die erste Zahl als größere gewertet.
Loki schrieb:> Im Prinzip kannst du einen der gängigen Sortieralgorithmen benutzen. Die> Vergleichsfunktion muss halt angepasst werden. Ich würde das über ein> Dictionary lösen. In dem Dictionary würden dann die Definitionen stehen.> Jede Definition sieht folgendermaßen aus: Zahl1, Zahl2, Relation.> Die Vergleichsfunktion kriegt zwei Zahlen und guckt im Dictionary,> welche größer ist. Ist kein passender Eintrag vorhanden, wird einfach> die erste Zahl als größere gewertet.
Ich verstehe nicht, wie das aussehen kann. Bitte ein simples Beispiel.
Nostrifizius in der Satrapenwirtschaft schrieb:> Ich verstehe nicht, wie das aussehen kann. Bitte ein simples Beispiel.
Statt eines einzigen Dictionaries würde ich hier eher eine Matrix bzw.
ein Dictionary aus Dictionaries nehmen (ist die Reihenfolge von Anfang
an eindeutig, geht's natürlich auch mit nur einem einfachen
Dictionary/Array/Liste etc.).
umgesetzt werden könnte das dann bspw. in C# (sollte sich aber
problemlos in VB umschreiben lassen) so oder wie von DirectX angedeutet,
mit einer Sprache, die so etwas besser kann.
Unstimmigkeiten kann man mit passendem Iterieren über die einzelnen
Dictionaries herausfinden.
spess53 schrieb:> Hi>> Hat Visual Basic keine Listenelemente? Mit Delphi würde ich ein TList> nehmen. 'Sorted' auf True und fertig.>> MfG Spess
Gibt's schon, nur gehe ich davon aus, dass das nicht reicht.
Ich habe folgendes geschrieben - Bubblesort:
Dim vTemp As String
For j = Inhalt.Count - 1 To 0 Step -1
For i = 0 To j
If i < Inhalt.Count - 1 Then
If Vergleich(Inhalt(i).ToString, Inhalt(i + 1).ToString) Then
vTemp = Inhalt(i).ToString
MsgBox("Drin")
Inhalt(i) = Inhalt(i + 1)
Inhalt(i + 1) = vTemp
End If
End If
Next i
Next j
Vergleich-Funktion gibt True aus, wenn Inhalt(i) größer ist, also nach
Inhalt(i + 1) stehen soll.
Leider wird die Fkt so gut wie nie aufgerufen. Inhalt ist ein ArrayList.
Verwende ich stattdessen das Original von
http://msdn.microsoft.com/de-de/library/bb979305.aspx
Dim vTemp As String
For j = Inhalt.Count - 1 To 0 Step -1
For i = 0 To j
If Vergleich(Inhalt(i).ToString, Inhalt(i + 1).ToString) Then
vTemp = Inhalt(i).ToString
MsgBox("Drinf")
Inhalt(i) = Inhalt(i + 1)
Inhalt(i + 1) = vTemp
End If
Next i
Next j
wird angezeigt, daß außerhalb des Index operiert werden würde. Bei 10
Elementen, 0 -> 9 gibt es bei 9 den Indexfehler.
Warum funktioniert das Original nicht und meine veränderte Fkt wird so
gut wie nie aufgerufen.
Es kann jetzt leicht sein, daß ich unabsichtlich Informationen
unterschlage. Bei Verständnisschw. fragen.
... schrieb:> Wenn man schon fremden Code benutzt sollte man ihn entweder verstehen> oder wenigstens korrekt abtippen.> Tip: "Inhalt.Count" vs. "UBound(ArrayToSort)"
Da liegst du falsch. Warum muß ich dir nicht begründen.
Doch mußt Du. Das ist nämlich der Grund dafür:
Nostrifizius in der Satrapenwirtschaft schrieb:> wird angezeigt, daß außerhalb des Index operiert werden würde. Bei 10> Elementen, 0 -> 9 gibt es bei 9 den Indexfehler.
Du hast 10 Elemente, versuchst aber auf das 11. zuzugreifen!
Hmm, versucht da jemand sich wieder die Hausübung machen zu lassen und
wird sofort unfreundlich wenn man ihn nicht direkt mit der Nase auf
seine Fehler stösst.
Ist schon interessant, erst erzählt er etwas von Sortieralgorithmen und
spezifischen Regeln für die Sortierung und präsentiert dann einen
fehlerhaften Bubblesort...
U.R. Schmitt schrieb:> Hmm, versucht da jemand sich wieder die Hausübung machen zu lassen und> wird sofort unfreundlich wenn man ihn nicht direkt mit der Nase auf> seine Fehler stösst.> Ist schon interessant, erst erzählt er etwas von Sortieralgorithmen und> spezifischen Regeln für die Sortierung und präsentiert dann einen> fehlerhaften Bubblesort...
Viel interessanter ist, daß du das Problem gar nicht erst lösen kannst
aber dennoch schreibst um jeden zu zeigen, daß du es nicht kannst.
Arc Net schrieb:> Und warum BubbleSort, wenn ArrayList schon Sort kennt?
Weil die Sort - Funktion sich nicht mit meiner Vergleich(a,b)-Funktion
verbinden läßt. Nur über irgendwelche Interfaces mit massig
Fehlermeldungen.
Nostrifizius in der Satrapenwirtschaft schrieb:> Nur über irgendwelche Interfaces mit massig> Fehlermeldungen.
ROFL, genau da liegt dein Schlüssel zum Glück. Die Interfaces gibts auch
ohne Fehlermeldungen.
Läubi .. schrieb:> @satrapen bitte etwas mehr Freundlichkeit bitte, schließlich möchtest du> gerne Hilfe erhalten.
Läubi, willst du nur stänkern oder kannst du auch die Frage beantworten?