Mehrdimensionales Array sortieren und in ein eindimensionales Array übertragen


Snaer

Grünschnabel
Guten Tag ich zweifle schon seit 2 Tagen an einer bestimmten Aufgabe.
Ich möchte ein mehrdimensionales Array in ein eindimensionales Array übertragen, dabei soll aber die jeweils größte Zahl aus jedem Teil Array ausgelassen bzw ignoriert werden. Das so entstandene Array soll dann schließend mit der Bubble Sort Methode absteigend sortiert werden. Die Länge und die Werte der Arrays kenne ich normalerweise nicht in meinem Code habe ich jedoch einfach Beispiel Werte genommen und diese zu überprüfen.
Code:
import java.util.Arrays;

public class beispiel {
    public static void main(String[] args) {
        int[][] b = { new int[] { 1, 2, 3, 4 }, new int[] { 4, 3, 2, 1 }, new int[] { 0, 7, 8, 4, 3 },
                new int[] { -13, 4 } };
        int n = 0;
        int[] a;
        for (int i = 0; i < b.length; i++) {
            n += b[i].length;
        }
        a = new int[n];
        int[] c = {};
        int tmp = 0;
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[i].length; j++) {
                tmp = b[i][0];
                if (b[i][j] > tmp) {
                    tmp = b[i][j];
                    b[i][j] = b[i][b[i].length - 1];
                    b[i][b[i].length - 1] = tmp;
                }
            }
        }
        int count = 0;
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[i].length - 1; j++) {
                a[count] = b[i][j];
                count++;
            }
        }
        boolean swapped;
        do {
            swapped = false;
            for (int i = 1; i < a.length; i++) {
                if (a[i] > a[i - 1]) {
                    int swap = a[i - 1];
                    a[i - 1] = a[i];
                    a[i] = swap;
                    swapped = true;
                }
            }
        } while (swapped);
        System.out.println(Arrays.toString(a));
        
    }

}
Das Problem ist mithilfe des Sysos ist meine Ausgabe folgende: [8, 7, 4, 4, 3, 3, 2, 2, 1, 0, 0, 0, 0, 0, -13],
Somit wurden die größten Zahlen ja leider nicht ignoriert und außerdem verstehe ich nicht woher diese 5 " 0 " aufeinmal kommen.
Für Verbesserungsvorschläge wäre ich sehr dankbar.
 

ikosaeder

Teekannen-Agnostiker
Erstmal geh schrittweise vor. Finde zuerst das Maximum in jedem Teilarray.
Dann nimm ein mehrdimensionales Array und mach daraus ein 1d Array. Dann sortier dieses Array. Und wenn das alles klappt, dann bau es zusammen.
 

Sempervivum

Erfahrenes Mitglied
Man könnte auch daran denken, für das Bubblesort eine Funktion zu schreiben. Sortiert man damit die Teil-Arrays absteigend, braucht man nur das erste Element zu überspringen.
Con: Möglicherweise ist die Performance weniger gut, weil das Sortieren mehrere Durchläufe erfordert.
Pro: Übersichtliche Struktur, weil die Sortierung mehrfach verwendet werden kann.
 

ikosaeder

Teekannen-Agnostiker
Ich würde für jeden Teil eine Funktion schreiben. Ein removeMax, ein flatten2DArray und ein bubblesort.
Java ist einfach eine schlechte Sprache für solche Sachen. In Python ist das so viel einfacher.
 

Neue Beiträge