S
souly
Gast
hallo,
habe folgendes problemchen oder besser anliegen.
hab mir einen algorithmus implementiert bei dem ich ein Eingabearray bekomme (unsortiert) und dann die n-größte zahl ermittelt, dabei wird das eingabearray in 3 weitere arrays aufgeteilt. eins in dem alle werte kleiner einem vergleichswert sind, eins für die, die exakt dem vergleichswert entsprechen und dann noch eins wo alles größer als der vergleichswert reinkommt.
klappt soweit wunderbar, nur was mich etwas stört, ich muss zuerst das gesamte array durchlaufen und die vergleichsopration auf <, > bzw. = durchführen und zählen wieviele werte für die 3 neuen arrays, in die das ganze aufgeteilt werden, soll jeweils hinein müssen.
dann erzeuge ich die 3 arrays anhand der ermittelten größen und lassen exakt die selbe vergleichsroutine nochma durchlaufen, nur das ich diesesmal die werte halt verschiebe, bzw kopiere.
Das ist natürlich doppelt-gemoppelt. Kann man das irgendwie kombinieren oder sich den zweiten durchlauf sparen? find das so sehr unschön
habe folgendes problemchen oder besser anliegen.
hab mir einen algorithmus implementiert bei dem ich ein Eingabearray bekomme (unsortiert) und dann die n-größte zahl ermittelt, dabei wird das eingabearray in 3 weitere arrays aufgeteilt. eins in dem alle werte kleiner einem vergleichswert sind, eins für die, die exakt dem vergleichswert entsprechen und dann noch eins wo alles größer als der vergleichswert reinkommt.
klappt soweit wunderbar, nur was mich etwas stört, ich muss zuerst das gesamte array durchlaufen und die vergleichsopration auf <, > bzw. = durchführen und zählen wieviele werte für die 3 neuen arrays, in die das ganze aufgeteilt werden, soll jeweils hinein müssen.
dann erzeuge ich die 3 arrays anhand der ermittelten größen und lassen exakt die selbe vergleichsroutine nochma durchlaufen, nur das ich diesesmal die werte halt verschiebe, bzw kopiere.
Das ist natürlich doppelt-gemoppelt. Kann man das irgendwie kombinieren oder sich den zweiten durchlauf sparen? find das so sehr unschön
Code:
//Zählen wieviele Elemente in die 3 Mengen gehören
int sizeL=0, sizeE=0, sizeG=0;
for (int i=0; i < in.length; i++)
{
if (cmp.compare(in[i], in[rndDigit]) < 0)
sizeL++;
else if (cmp.compare(in[i], in[rndDigit]) == 0)
sizeE++;
else
sizeG++;
}
//Hilfsarrays erstellen
Object [] l = new Object [sizeL]; int lc = 0;
Object [] e = new Object [sizeE]; int ec = 0;
Object [] g = new Object [sizeG]; int gc = 0;
//Eingangsarray in die Hilfsarrays verteilen gemäß Vergeichsschlüssel
for (int i=0; i < in.length; i++)
{
if (cmp.compare(in[i], in[rndDigit]) < 0)
l[lc++] = in[i];
else if (cmp.compare(in[i], in[rndDigit]) == 0)
e[ec++] = in[i];
else
g[gc++] = in[i];
}