Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Median bestimmen » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 2 Beiträge
as_string

Erstens bin ich mir nicht sicher, ob das sinnvoll ist, immer das Array als Argument rum zu reichen. Geht das nicht einfacher?
Außerdem würde ich den Rückgabewert von median gleich als int und nicht als Arrays von int machen. Dann auch die Zeilen 12 und 13 zu
code:
1:
return data[(data.length) / 2];
umschreiben und eigentlich brauchst Du dann auch kein getMedian() mehr, weil das direkt durch median() ersetzt werden würde.

Aber der Fehler ist in Zeile 23:
code:
1:
right = left + median.length % 5;

Das müsste eigentlich:
code:
1:
right = left + data.length % 5;

sein.

Gruß
Marco
Zeaschi Median bestimmen

Meine Frage:
Liebe Community,
ich versuche gerade den Median of Medians Algorithmus zu implementieren, jedoch ist dieser fehlerhaft. Vielleicht kann mir jemand sagen wo mein gedanklicher Fehler liegt

Meine Ideen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
public int getMedian(int[] data) {
        int[] m = median(data);
        return m[0];

    }

    private int[] median(int[] data) {
        int[] median = new int[(data.length + 4) / 5];// Berechne wie viele Gruppen es gibt
        int right;
        if (data.length <= 5) {
            { sort(data, 0, data.length);
                median[0] = data[(data.length) / 2];
                return median;
            }

        } else {
            //Partitionieren
            for (int i = 0; i < median.length; i++) {
                int left = 5 * i;// Abstände der Gruppen


                if (i == median.length - 1) {
                    right = left + median.length % 5;
                    data = sort(data, left, right);
                    median[i] = data[left + ((right - left+1 ) / 2)];
                } else {
                    right = left + 5;//Das erste Elemente dass nicht mehr dazu gehört}

                data = sort(data, left, right);
                median[i] = data[left +2];
                }


            }
            return median(median);
        }
    }

    public int[] sort(int[] arr, int s, int e) {//Bubbelsort zum sortieren des partitionen sollte eig passen bereits an vielen random erzeugen array getestet
        for (int i = s; i < e; i++)
            for (int j = s; j < e - i - 1; j++)
                if (arr[j] > arr[j + 1]) {
                    // swap temp and arr[i]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
        return arr;

    }