2 Arrays mischen

DerEineDa

Mitglied
Zwei sortierte Arrays sollen gemischt werden, so dass ein ebenfalls sortiertes Gesamt-Array herauskommt.

Bis zur Zahl 9 klappt alles auch perfekt. Danach scheitert es an der letzten Zahl, weil:
Die beiden Arrays sind unterschiedlich lang. Bedeutet beim letzten Durchlauf vergleicht er array1 and der letzten Position mit array2 an der letzten Position. Und da 9 größer als 10 ist, gibt er als letztes 9 aus, anstatt die 10.

Jemand eine Idee wie man das Problem lösen könnte?

Java:
public static void main (String[] args) {
        int [] array1 = { 1 , 3 , 3 , 5 , 6 , 9 };
        int [] array2 = { 2 , 3 , 5 , 7 , 8 , 9, 10 };
        int [] result = new int [13];
       
       
        // ab hier beginnt die Aufgabe
        int a = 0;
        int b = 0;
        int k = 0;
       
        while (k < result.length) {
            if (array1[a] < array2[b]) {
                result[k] = array1[a];
                k++;
                if (a < array1.length - 1) {
                    a++;
                }
            }
           
            else if (array1[a] > array2[b]) {
                result[k] = array2[b];
                k++;
                if (b < array2.length - 1) {
                    b++;
                }
            }
           
           
            else if (array1[a] == array2[b]) {
                result[k] = array1[a];   
                k++;
                if (a < array1.length - 1) {
                    a++;
                }
                result[k] = array2[b];
                k++;
                if (b < array2.length - 1) {
                    b++;
                }
            }       
        }
        // bis hier
       
        for (int i = 0; i < result.length; i++) {
            System.out.print(result[i] + " ");
        }
        System.out.println() ;
        // output : 1 2 3 3 3 5 5 6 7 8 9 9 10
    }
 
X

Xyz1

Gast
2. Auflage

Wie würdest Du das denn per Hand mit zwei Kartenstapeln mit Karten von 1 bis 10 machen? ;)

Wann muss wann wie verglichen und umgelegt werden. :mad:

Tipp 3: Müssen alle Karten durchgesehen werden?

Weisheit des Tages: Konfuzius sagt, Es ist besser, ein einziges kleines Licht anzuzünden, als die Dunkelheit zu verfluchen
 
X

Xyz1

Gast
:oops:

Ich muss mich übrigens berichtigen, Merge steht schon auf Seite 29, 30, 31 und 32....
Nich dass der Eindruck entstünde ich hätte das ganze Buch gelesen.:D

@mihe7 Ist das neuerdings Beleidigung?:( Wollte freundlich sein:)
 

DerEineDa

Mitglied
Danke, hat geholfen :)
Hier die Version die funktioniert, für jeden den es interessiert
Java:
        int a1 = array1.length - 1;
        int a2 = array2.length;
        int k = 0;
      
        for (int i = 0; i < a1 + a2 + 1; i++) {
            if (k > a1) {
                result[i] = array2[i-k];
            }
            else if (k < i - a2) {
                result[i] = array1[k];
                k++;
            }
            else if (array1[k] <= array2[i-k]) {
                result[i] = array1[k];
                k++;
            }
            else {
                result[i] = array2[i-k];
            }
        }
 
X

Xyz1

Gast
Ich schaff weniger :)
Java:
System.out.println(Arrays.toString(mer(new int[]{2}, new int[]{1, 2, 3})));
}

static int[] mer(int[] a, int[] b) {
    int[] c = new int[a.length + b.length];
    int i = 0;
    int j = 0;
    int k = 0;
    while (k < a.length + b.length) {
        if (j >= b.length || (i < a.length && a[i] <= b[j])) {
            c[k++] = a[i++];
        } else {
            c[k++] = b[j++];
        }
    }
    return c;
}
 

Sdxo123

Mitglied
Java:
public static int[] abc(int[] werte, int[] werte2) {
  int[] neuarray = new int[werte.length+werte2.length];
 
  for (int i = 0; i < werte.length; i++) {
    neuarray[i] = werte[i];
  }
  for (int j =0; j < werte2.length; j++) {
    neuarray[j+werte.length] =werte2[j];
  }
     
  for (int i = 0; i < neuarray.length; i++) {
    for (int j =0; j < neuarray.length; j++) {
      if (neuarray[i] < neuarray[j]) {
        int temp = neuarray[i];
        neuarray[i] = neuarray[j];
        neuarray[j] = temp;
      }
    }
  }
}
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
@Sdxo123
1. bitte Code-Tags verwenden [code=Java]Dein Code[/code]
2. was Du machst, ist zwei Arrays in ein neues zu kopieren und anschließend zu sortieren (und das noch dazu recht ineffizient - das j muss nicht von 0 beginnen). Das funktioniert zwar, geht aber am Thema vorbei, weil nicht ausgenutzt wird, dass die beiden Arrays bereits sortiert sind :)
 
X

Xyz1

Gast
@Sdxo123 , @mihe7 hat es toll erklärt....
Tatsächlich ließe sich, so man es verbessern wollte, nur die k-Variable zu lasten der Übersichtlichkeit einsparen....
 

Neue Themen


Oben