array->groesstes und kl...
-
int arr [] = { 10, 5, 15, 20, 1} int min = -1; int max = -1; for(int i = 0; i < 5; ++i) { if(min == -1 || arr[i] < arr[min]) min = i; if(max == -1 || arr[i] > arr[max]) max = i; }
MfG SideWinder
-
SideWinder schrieb:
int arr [] = { 10, 5, 15, 20, 1} int min = -1; int max = -1; for(int i = 0; i < 5; ++i) { if(min == -1 || arr[i] < arr[min]) min = i; if(max == -1 || arr[i] > arr[max]) max = i; }
Im Prinzip gut, aber verbesserungsverdächtig, was das || angeht.
int arr [] = { 10, 5, 15, 20, 1} int min = INT_MIN; int max = INT_MAX; for(int i = 0; i < 5; ++i) { if(arr[i] < arr[min]) min = i; if(arr[i] > arr[max]) max = i; }
entweder sind alle elemente gleich INT_MIN und dann ist als ergebnis INT_MIN korrekt oder es gibt ein größeres element und INT_MIN ist aus dem rennen.
neuerdings ist allerdings
int arr [] = { 10, 5, 15, 20, 1} int min = arr[0]; int max = arr[0]; for(int i = 1; i < 5; ++i) { if(arr[i] < arr[min]) min = i; if(arr[i] > arr[max]) max = i; }
moderner.
-
Also die erste Version von dir sollte afaik sofort den Abgang machen, arr[INT_MIN] und arr[INT_MAX] dürften beide weit außerhalb des Speicherbereichs liegen.
Das funktioniert nur wenn man nicht die kleinste Position sondern den kleinsten Wert sucht. Dann bleibt einem aber sowieso nichts anderes über.
Bei der zweiten Version scheinst du da auch was vermixt zu haben, afaik gehört da nicht arr[0] als Initwert sondern 0?
MfG SideWinder
-
SideWinder schrieb:
Also die erste Version von dir sollte afaik sofort den Abgang machen, arr[INT_MIN] und arr[INT_MAX] dürften beide weit außerhalb des Speicherbereichs liegen.
int min = INT_MAX;
ist vielleicht richtig. so, daß auch mit großer wahrscheinlichkait der wert wegfliegt.
Bei der zweiten Version scheinst du da auch was vermixt zu haben, afaik gehört da nicht arr[0] als Initwert sondern 0?
nee, ich dachte schon an arr[0].
-
Wie soll das mit arr[0] funktionieren? Gehen wir das Beispiel durch:
int arr [] = { 10, 5, 15, 20, 1} int min = arr[0]; // min = 10 int max = arr[0]; // max = 10 for(int i = 1; i < 5; ++i) { if(arr[i] < arr[min]) // arr[1] < arr[10]? -> 0x00000005 min = i; if(arr[i] > arr[max]) // Dito max = i; }
Funktionieren würde es mit 0 statt arr[0], dann wär das auch die gewünschte etwas perfomantere Version meines Ur-Codes:
int arr [] = { 10, 5, 15, 20, 1} int min = 0; int max = 0; for(int i = 1; i < 5; ++i) { if(arr[i] < arr[min]) min = i; if(arr[i] > arr[max]) max = i; }
MfG SideWinder
-
tee ha ix
-
SideWinder schrieb:
Wie soll das mit arr[0] funktionieren? Gehen wir das Beispiel durch:
ups. hatte deinen code nicht genau gelesen. du machst ja if(arr[i] < arr[min]) statt if(arr[i] < min).
mein code war für if(arr[i] < min) gedacht und min ist dann der kleinste wert.
-
Das funktioniert nur wenn man nicht die kleinste Position sondern den kleinsten Wert sucht. Dann bleibt einem aber sowieso nichts anderes über.
Sind wir uns doch noch einig geworden
MfG SideWinder
-
Hallo
SideWinder schrieb:
int arr [] = { 10, 5, 15, 20, 1} int min = 0; int max = 0; for(int i = 1; i < 5; ++i) { if(arr[i] < arr[min]) min = i; if(arr[i] > arr[max]) max = i; }
Wieso nicht else if der Wert kann ja nicht gleichzeitig größer und kleiner sein.
Gruß Alex
-
Damits für den Originalposter übersichtlicher wird wo was gehandlet wird. Aber hast schon recht
<sarkasmus>Nächstes Mal versuche ich mich in Assembler, ist eventl. noch schneller ;)</sarkasmus>
MfG SideWinder