Sortieralgorihmus

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
kuhno
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Sa, 07. Jan 2006 17:30
Wohnort: Braunschweig
Kontaktdaten:

Sortieralgorihmus

Beitrag von kuhno »

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
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi,
kuhno 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
em, äh ... wie sieht dein Array genau aus ? kann das sein das die vom
Type "C" sind ?

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi,

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
gruss by OHR
Jimmy
kuhno
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Sa, 07. Jan 2006 17:30
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von kuhno »

Hallo Jimmy,

ja, die Daten sind von Typ "C". Spielt denn das eine Rolle? In der Hilfe ist darüber nichts zu finden. Dort wird nur ein zwei Dim-Array behandelt. Meins ist Eindimensional.

Sollte das mit Zahlen, umgewandelt mit val(), gehen, dann ist ja alles in Ordnung.

Gruß

Manfred
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

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
kuhno
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Sa, 07. Jan 2006 17:30
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von kuhno »

Hallo Jan,

na klar, man sieht manchmal der Wals vor lauter Bäumen nicht.

Gruß

Manfred
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi,
AUGE_OHR hat geschrieben: wo wir schon bei ASORT() sind, wie kann ich beide Elemente sortieren
habe es

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
gruss by OHR
Jimmy
Antworten