Sortieralgorihmus
Moderator: Moderatoren
-
- UDF-Programmierer
- Beiträge: 54
- Registriert: Sa, 07. Jan 2006 17:30
- Wohnort: Braunschweig
- Kontaktdaten:
Sortieralgorihmus
Hallo,
beim Sortieren eines Arrays mit ASort(...) ist mir aufgefallen, das die Null in aufsteigender Reiehnfolge zuerst steht. Was aber für mich viel schlimmer ist, das Zahlen in folgender Reihenfolge nach dem sortieren auftreten:
Eingabe: 3,7,9,16,22,15,31,
daraus wird dann: 15,16,22,3,31,7,9
Das ist für mich keine Sortierung im eigentlichen Sinne.
Gibts da ausser einer selbstgemachten Funktion was besseres?
Gruß
Manfred
beim Sortieren eines Arrays mit ASort(...) ist mir aufgefallen, das die Null in aufsteigender Reiehnfolge zuerst steht. Was aber für mich viel schlimmer ist, das Zahlen in folgender Reihenfolge nach dem sortieren auftreten:
Eingabe: 3,7,9,16,22,15,31,
daraus wird dann: 15,16,22,3,31,7,9
Das ist für mich keine Sortierung im eigentlichen Sinne.
Gibts da ausser einer selbstgemachten Funktion was besseres?
Gruß
Manfred
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Sortieralgorihmus
hi,
Type "C" sind ?
gruss by OHR
Jimmy
em, äh ... wie sieht dein Array genau aus ? kann das sein das die vomkuhno hat geschrieben: beim Sortieren eines Arrays mit ASort(...) ist mir aufgefallen, das die Null in aufsteigender Reiehnfolge zuerst steht. Was aber für mich viel schlimmer ist, das Zahlen in folgender Reihenfolge nach dem sortieren auftreten:
Eingabe: 3,7,9,16,22,15,31,
daraus wird dann: 15,16,22,3,31,7,9
Type "C" sind ?
gruss by OHR
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
sortierung von mehreren Elementen in einem Array
hi,
wo wir schon bei ASORT() sind, wie kann ich beide Elemente sortieren
gruss by OHR
Jimmy
wo wir schon bei ASORT() sind, wie kann ich beide Elemente sortieren
Code: Alles auswählen
PROCEDURE Main
LOCAL aArray := { ;
{"E", 1 }, ;
{"E", 2 }, ;
{"E", 3 }, ;
{"E", 4 }, ;
{"A", 1 }, ;
{"A", 2 }, ;
{"A", 3 }, ;
{"D", 2 }, ;
{"D", 4 }, ;
{"D", 5 }, ;
{"C", 1 }, ;
{"C", 3 }, ;
{"C", 5 }, ;
{"B", 1 }, ;
{"B", 4 } ;
}
// 1. Spalte aufsteigend sortieren
//
ASort( aArray,,, {|aX,aY| aX[1] < aY[1] } )
CLS
AEVAL( aArray, {|aX| QOut(aX[1],aX[2]) } )
WAIT
// 2. Spalte absteigend sortieren
//
ASort( aArray,,, {|aX,aY| aX[2] > aY[2] } )
CLS
AEVAL( aArray, {|aX| QOut(aX[1],aX[2]) } )
WAIT
// und wie sortiere ich beide Elemente (auf/ab egal) ???
//
ASort( aArray,,, {|aX,aY| aX[1] < aY[1] .AND. aX[2] < aY[2] } )
CLS
AEVAL( aArray, {|aX| QOut(aX[1],aX[2]) } )
WAIT
RETURN
Jimmy
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Hallo Manfred,
worauf Jimmy hinaus will (denke ich): Wenn das vom Typ "C" ist, dann gibt es ja keine "Größe" der Zahl, sondern es geht um die Stelle in der ANSI-Reihenfolge. Und da steht die 3 hinter der 1. Also steht die 15 vor der 3, denn die 1. Stelle ist bei der 13 (=1. Stelle ist "1") < "3". Du musst das in der Tat mit VAL() machen, dann geht es nach der numerischen Größe.
Jan
worauf Jimmy hinaus will (denke ich): Wenn das vom Typ "C" ist, dann gibt es ja keine "Größe" der Zahl, sondern es geht um die Stelle in der ANSI-Reihenfolge. Und da steht die 3 hinter der 1. Also steht die 15 vor der 3, denn die 1. Stelle ist bei der 13 (=1. Stelle ist "1") < "3". Du musst das in der Tat mit VAL() machen, dann geht es nach der numerischen Größe.
Jan
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: sortierung von mehreren Elementen in einem Array
hi,
gruss by OHR
Jimmy
habe esAUGE_OHR hat geschrieben: wo wir schon bei ASORT() sind, wie kann ich beide Elemente sortieren
Code: Alles auswählen
// sortiert beide Elemente
//
ASort( aArray,,, {|aX,aY| aX[1]+str(aX[2]) < aY[1]+str(aY[2]) })
CLS
AEVAL( aArray, {|aX| QOut(aX[1],aX[2]) } )
WAIT
Jimmy