bufferm44
Goto Top

Variablen nach Größe sortieren

Hi zusammen!

Ich habe 6 Variablen, a-f, diese enthalten ganze Zahlen von 0-999. Zwei Variablen können den gleichen Wert haben.

Wie kann ich die Variablan nach Größe sortieren? Mir fällt als Lösungsansatz nur ein, eine nach der anderen mit allen zu vergleichen. aber das ist natürlich megaumständlich...

Gibt es einen eleganteren Lösungsansatz?

Beispiel:

a=1 b=10 c=10 d=300 e=500 f=700

Nun soll eine "Platzierung" (wie bei einem Wettbewerb) errechnet werden:

fplatz=1
eplatz=2
dplatz=3
cplatz=4
bplatz=4 (haben ja beide gleiche Punktzahl)
aplatz=5

Hat jemand einen Tipp?

LG

Tobi

Content-Key: 109573

Url: https://administrator.de/contentid/109573

Printed on: April 24, 2024 at 05:04 o'clock

Member: ElForum
ElForum Feb 20, 2009 at 12:57:04 (UTC)
Goto Top
funktion quicksort(links, rechts)
     falls links < rechts dann
         teiler := teile(links, rechts)
         quicksort(links, teiler-1)
         quicksort(teiler+1, rechts)
     ende
 ende

Die folgende Implementierung der Funktion teile teilt das Feld so, dass sich das Pivotelement an seiner endgültigen Position befindet und alle kleineren Elemente davor stehen, während alle größeren danach kommen:

 
funktion teile(links, rechts)
     i := links 
     // Starte mit j links vom Pivotelement
     j := rechts - 1
     pivot := daten[rechts]

     wiederhole

         // Suche von links ein Element, welches größer als das Pivotelement ist
         wiederhole solange daten[i] ≤ pivot und i < rechts
             i := i + 1  
         ende 

         // Suche von rechts ein Element, welches kleiner als das Pivotelement ist
         wiederhole solange daten[j] ≥ pivot und j > links
             j := j - 1 
         ende  

         falls i < j dann tausche daten[i] mit daten[j]

     solange i < j // solange i an j nicht vorbeigelaufen ist 

     // Tausche Pivotelement (daten[rechts]) mit neuer endgültiger Position (daten[i])
   
     falls daten[i] > pivot 
             tausche daten[i] mit daten[rechts] 
     ende
     
     // gib die Position des Pivotelements zurück
    
     antworte i
 ende
Member: bastla
bastla Feb 20, 2009 at 14:46:17 (UTC)
Goto Top
Hallo bufferm44!

Woher stammen denn die Werte, und wie soll die Verarbeitung nach der Rangbestimmung fortgesetzt werden?

Die Rangziffern ermitteln (wobei nach zwei 4. Rängen für die Punktzahl 10 eigentlich für 1 Punkt nur noch der 6. Rang bliebe) könntest Du zB so:
@echo off & setlocal enabledelayedexpansion

set /a Punkte1=1
set /a Punkte2=10
set /a Punkte3=10
set /a Punkte4=300
set /a Punkte5=500
set /a Punkte6=700

set /a Anzahl=6
for /L %%i in (1,1,%Anzahl%) do for /L %%j in (1,1,%Anzahl%) do if !Punkte%%i! leq !Punkte%%j! set /a Rang%%i+=1
echo Punkte	Rang
for /L %%i in (1,1,%Anzahl%) do echo !Punkte%%i!	!Rang%%i!
Grüße
bastla
Member: bufferm44
bufferm44 Feb 27, 2009 at 17:39:58 (UTC)
Goto Top
Hi bastla!

Großartige Idee mit dem Vergleichen face-smile

Funktioniert perfekt!

Woher stammen denn die Werte, und wie soll die Verarbeitung nach der
Rangbestimmung fortgesetzt werden?

Sie werden aus Textdateien ausgelesen (ein externes Programm speichert sie und liest auch die später geschriebene "Ranglistendatei" aus.

Auch dass es bei Gleichplatzierung z.B. keinen 3., sondern nur zwei 4. Plätze gibt ist optimal.

Vielen Dank face-smile

@el Forum - Dank Dir auch, leider falsche Sprache ;)