Sortieren nach 2 Werten
Übersicht

![]() |
regaaBetreff: Sortieren nach 2 Werten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bisher hab ich folgendes Code für das Abwärts sortieren einer bestimmten variable verwendet:
Code: [AUSKLAPPEN] For t\atext.atext= Each atext If max_y>t\atext\y Insert t\atext Before Before t\atext If t\atext<> First atext t\atext.atext=Before t\atext EndIf EndIf max_y=t\atext\y Next Und das funzt auch gut, ob es schnell ist , ist ne andere Sache, aber wie bekomm ich es hin nach 2 Werten zu sortieren? Also, z.B: nach nachnake und wenn dieser gleich ist auch noch nach vorname? Wie muss ich das erweitern? Schon mal Danke an alle. |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es gibt bestimmt viele Möglichkeiten.
Wenn der untersuchte Name 1 nicht kleiner und nicht größer, sondern gleich ist als der Vergleich, dann vergleichst du auch die zwei 2.Namen und entscheidest so, ob der Name davor oder danach gesetzt werden soll. |
||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, das hab ich mir auch überlegt, aber da es gestern so spät war, hab ich mir gedacht das ins Forum zu posten in der Hoffnung einen fertigen Code zu kriegen ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sodale, nu bin ich zu Hause und hab folgenden Code vor mir der nicht wirklich funktioniert:
Code: [AUSKLAPPEN] For t\atext.atext= Each atext If max_y>t\atext\y Insert t\atext Before Before t\atext If t\atext<> First atext t\atext.atext=Before t\atext EndIf DebugLog "SortY" EndIf ; Nach dem 2ten Wert sortieren If max_y=t\atext\y If max_x>t\atext\x Insert t\atext Before Before t\atext If t\atext<> First atext t\atext.atext=Before t\atext EndIf DebugLog "SortX "+max_x+" "+t\atext\x EndIf max_x=t\atext\x EndIf max_y=t\atext\y ;DebugLog "Sort"+Rnd(1,10) Next Und meine Frage ist wie ich das anders machen soll? So wie es da steht erzeugt es eine endlosschleife, aus mir unlogischen Gründen, ûnd falls ich die Selektion des letzten objekts rausnehme werden folglich nicht alle durchgenommen. Hoffe ihr könnt's lösen. |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Jo, das hab ich mir auch überlegt, aber da es gestern so spät war, hab ich mir gedacht das ins Forum zu posten in der Hoffnung einen fertigen Code zu kriegen
Naja, weils kompliziert ist, will mal nicht so sein! ![]() ich habe mir kürzlich einen Sortalgo für Types gecoded und ein bischen erweitert in deinem Sinne, mußte halt nur abändern! Mit Test-Daten zum probieren :Code: [AUSKLAPPEN] Graphics 640,480,16,2
SetBuffer BackBuffer () Type Namen Field NN$,VN$ End Type For t= 0 To 15 Namen.Namen = New Namen Read Namen\NN$ Read Namen\VN$ Next zeige(10) Insert_sort_Type_II() zeige(300) WaitKey End Function Insert_sort_Type_II() For Namen.Namen = Each Namen: gs = gs+1:Next bs = 1 Repeat Namen.Namen = Last Namen Insert Namen Before First Namen Namen.Namen = First Namen NN$ = Namen\NN$ VN_1$= Namen\VN$ X = 1 bs = bs + 1 Repeat If bs = x Then Exit Namen.Namen = After (Namen) X = X + 1 If NN > Namen\NN$ Then Insert Namen Before Before Namen Namen.Namen = After (Namen) Else If NN = Namen\NN$ Then If Namen\VN$ < VN_1$ Insert Namen Before Before Namen Namen.Namen = After (Namen) End If EndIf End If Forever Until gs = bs End Function Function zeige(x) For q.Namen = Each Namen c=c +15 Text x+10, 10+c, q\NN$ Text x+100,10+c, q\VN$ Next Flip End Function Data "Rallimen","Ralf","Möller","Ralf","Möller","001","Möller","215","Möller","201" Data "Rallimen","001","Möller","456","Rallimen","456","Möller","215","Möller","013" Data "Möller","007","Rallimen","007","Rallimen","333","Rallimen","005","Rallimen","333" Data "Rallimen","00x" Sortiert das ganze Typefeld Vielleicht kannste es ja gebrauchen! PS:wer was schnelleres hat ..... her damit!!! |
||
[BB2D | BB3D | BB+]
|
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
nach 3 Stunden ![]() Code: [AUSKLAPPEN] Type typ Field wert1% Field wert2$ End Type For i=0 To 15 t.typ= New typ t\wert1=Rnd(1,3) t\wert2=Chr$(Rnd(60,90)) Next bubble_sort_two_values() Function bubble_sort_two_values() Local Int_wert%=0 Local Ende=False Local Ende_i%=0 Local String_wert$ Local gleicher_wert% While Ende=False Ende_i=0 Int_wert=0 For t.typ= Each typ If Int_wert>t\wert1 Insert t.typ Before Before t.typ If t.typ<>First typ t.typ=Before t.typ EndIf Ende_i=Ende_i+1 EndIf Int_wert=t\wert1 Next If Ende_i=0 Then Ende=True Wend Ende=False While Ende=False Ende_i=0 String_wert="" Int_wert=0 For t.typ=Each typ If gleicher_wert=t\wert1 If String_wert>t\wert2 Insert t.typ Before Before t.typ If t.typ<> First typ t.typ=Before t.typ EndIf Ende_i=Ende_i+1 EndIf String_wert=t\wert2 EndIf Int_wert=t\wert1 If Int_wert<>t\wert1 gleicher_wert=t\wert1 EndIf Next If Ende_i=0 Then Ende=True Wend End Function For t.typ=Each typ Print t\wert1+" "+t\wert2 Next |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß nicht, aber irgendwie geht die nicht?!
1N 1I 1C 1Y müste doch so ausehen 1C 1I 1N 1Y |
||
[BB2D | BB3D | BB+]
|
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
im Nachhinein, hab ich auch gemerkt das wohl irgendwo Fehler sind, aber während des testes, kam nicht einmal ein falscher Wert vor, hmm ![]() ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
warum prüfst du es nicht so:
Code: [AUSKLAPPEN] if nachname = nachname1 then vergleiche vorname
das wäre doch sinnvoll oder? |
||
Erare humanum est - Irren ist Menschlich |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
genau da bin ich grad dran, nur funktioniert das ganze irgendwie imer noch nicht ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich meine es gelöst zu haben , probiert des mal bitte aus.
Code: [AUSKLAPPEN] Type typ Field wert1% Field wert2$ End Type SeedRnd(MilliSecs()) For i=0 To 15 t.typ= New typ t\wert1=Rnd(1,5) t\wert2=Chr$(Rnd(60,90)) Next DebugLog "Vorher" For t.typ=Each typ DebugLog t\wert1+" "+t\wert2 Next DebugLog "Nachher" bubble_sort_two_values() Function bubble_sort_two_values() Local Int_wert%=0 Local Ende=False Local Ende_i%=0 Local String_wert$ Local gleicher_wert% Local anz_untersch=0 Local arr_unter[10000] While Ende=False Ende_i=0 Int_wert=0 anz_untersch=0 For i=0 To 10000 arr_unter[i]=0 Next For t.typ= Each typ If Int_wert>t\wert1 Insert t.typ Before Before t.typ If t.typ<>First typ t.typ=Before t.typ EndIf Ende_i=Ende_i+1 EndIf If Int_wert<>t\wert1 arr_unter[anz_untersch]=t\wert1 anz_untersch=anz_untersch+1 EndIf Int_wert=t\wert1 Next If Ende_i=0 Then Ende=True Wend For i=0 To anz_untersch-1;-1 Ende=False While Ende=False Ende_i=0 t.typ=First typ String_wert=t\wert2 Int_wert=0 For t.typ=Each typ If String_wert>t\wert2 And Int_wert=arr_unter[i] And t\wert1=arr_unter[i] Insert t.typ Before Before t.typ If t.typ<> First typ t.typ=Before t.typ EndIf Ende_i=Ende_i+1 EndIf String_wert=t\wert2 Int_wert=t\wert1 Next If Ende_i=0 Then Ende=True Wend Next End Function For t.typ=Each typ DebugLog t\wert1+" "+t\wert2 Next |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group