Forum: PC-Programmierung Wie 2 Arrays zusammenfügen und sortieren?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ich.hasse.java! (Gast)


Lesenswert?

Hallo,

bin gerade dabei für die Uni ein Programm zu schreiben.
Das Programm soll
-2 Arrays erstellen
- Länge und höchste zahl sollen über die Konsole eingegeben werden
- Beide arrays sollen mit zufälligen zahlen gefüllt werden
- Anschließend beide arrays in ein 3. rein und das wiederum sortieren

Hab alles bis auf den letzten Punkt und verzweifle langsam wirklich.
Vielleicht weiß jemand wie es geht.
Das 3. Array soll direkt sortiert werden und nicht ersten erstellt und 
dann sortiert:


import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class App {

  public static void main (String[] args) throws IOException
  {
 BufferedReader reader = new BufferedReader(new 
InputStreamReader(System.in));

     System.out.println("Länge Array eingeben");


          String capacity1 = reader.readLine();
          int capacity = Integer.parseInt(capacity1);

          System.out.println("maxvalue eingeben");
          String maxValue1 = reader.readLine();
          int maxValue = Integer.parseInt(maxValue1);


          int [] a1 =    createRandomIntegerArray(capacity, maxValue);
          System.out.println();
          System.out.println("Unsortiertes erstes Array:");
          printArray(a1);



          int [] b1 =    createRandomIntegerArray(capacity, maxValue);
          System.out.println();
          System.out.println("Unsortiertes zweites Array:");
          printArray(b1);

          System.out.println();
          System.out.println("Sortiertes erstes Array:");
          bubbleSort (a1);
          printArray(a1);

          System.out.println();
          System.out.println("Sortiertes zweites Array:");
          bubbleSort (b1);
          printArray(b1);

          Zusammenfügen(a1, b1);

        Zusammenfügen(c);             //hier soll die Methode ausgeführt 
werden
  }





  public static int[] createRandomIntegerArray(int capacity, int 
maxValue)
  {
    Random rnd = new Random();
    int[] result = new int[capacity];
    for (int i = 0; i < result.length; i++)
    {
      result[i] = rnd.nextInt(maxValue) + 1;
    }
    return result;
  }



  public static void printArray(int[] Values)
  {
    for (int i = 0 ; i < Values.length ; i++)
    {
      System.out.print(Values[i]);
      System.out.print(" ");
      }
      }




  public static void bubbleSort (int[] Values)
      {
      {
      for (int i = Values.length; i>0; i--)
      {
      for (int c = 1; c < i; c++)
      {
      if (Values[c-1] > Values[c])
      {
      int buf = Values[c-1];
      Values[c-1] = Values [c];
      Values[c] = buf;
      }
      }
      }
      }
      }




  private static void Zusammenfügen(int[] a1, int[] b1)
  {
    int Länge = a1.length + b1.length;
    int [] c = new int[Länge];

    boolean bool=true;

    while(bool)
    {
      int i=0;
      int j=0;
      int k=0;
      if(a1[i]<b1[j])
      {
        c[k]=a1[i];
        i++;
        k++;
        if(i==a1.length)
        {
          return;
        }
        else
        {
          c[k]=b1[j];
          j++;
          k++;
          if(j==b1.length);
        }
      }
         //hier weiß ich nicht mehr weiter
    }
  }
}

von Dirk B. (dirkb2)


Lesenswert?


von PittyJ (Gast)


Lesenswert?

Hatte ich letztens schon mal angemerkt.
Gerade an einer Uni müßte es noch ein Examplar von Niklaus Wirth 
"Algorithmen und Datenstrukturen" geben. Das war damals das Standardwerk 
mit allen Sortieralgorihmen.
Und früher gab es UBs, wo man sich Bücher ausleihen konnte. Haben die 
heute alle zu?

von Imonbln (Gast)


Lesenswert?

Ich.hasse.java! schrieb:
> bin gerade dabei für die Uni ein Programm zu schreiben.
> Das Programm soll
> [...]
> - Anschließend beide arrays in ein 3. rein und das wiederum sortieren

Wenn das die Aufgabenstellung ist und es keine weiteren Randbedingungen 
gibt. Java wird mindesten einen Sortieralgorithmus mitbringen zum 
Beispiel den in Collections. Einfach die Bibliotheksfunktion nutzen und 
viel Zeit und nerven sparen.

Sollte das dein Prof. nicht so prall finden, wird er sicher auf 
geeignete Literatur hingewiesen haben. Ansonsten das Buch „Algorithmen 
und Datenstrukturen“ ist eigentlich Pflicht für jeden Informatiker.

von Ich.hasse.java! (Gast)


Lesenswert?

Imonbln schrieb:
> Ich.hasse.java! schrieb:
>> bin gerade dabei für die Uni ein Programm zu schreiben.
>> Das Programm soll
>> [...]
>> - Anschließend beide arrays in ein 3. rein und das wiederum sortieren
>
> Wenn das die Aufgabenstellung ist und es keine weiteren Randbedingungen
> gibt. Java wird mindesten einen Sortieralgorithmus mitbringen zum
> Beispiel den in Collections. Einfach die Bibliotheksfunktion nutzen und
> viel Zeit und nerven sparen.
>
> Sollte das dein Prof. nicht so prall finden, wird er sicher auf
> geeignete Literatur hingewiesen haben. Ansonsten das Buch „Algorithmen
> und Datenstrukturen“ ist eigentlich Pflicht für jeden Informatiker.

Wir sollen ohne irgendwelche "Addons" die Aufgabe schaffen.

von zum Beispiel so (Gast)


Lesenswert?

Wenn die beiden Arrays bereits vorsortiert sind, dann z.B. so:

(C Code)
1
   // Array1 und Array2 sind vorsortiert
2
   // Array3 setzt sich (aufsteigend sortiert)
3
   // aus beiden Arrays zusammen
4
5
   // Laufindex für Array3 (Zielarray)
6
   size_t i = 0;
7
8
   // Laufindex für Array1
9
   size_t j = 0;
10
11
   // Laufindex für Array2
12
   size_t k = 0;
13
14
   while (1) {
15
      while ((j < arr1_len) &&
16
             (k >= arr2_len || arr1[j] <= arr2[k])) {
17
         arr3[i++] = arr1[j++];
18
      }
19
20
      while ((k < arr2_len) &&
21
             (j >= arr1_len || arr2[k] <= arr1[j])) {
22
         arr3[i++] = arr2[k++];
23
      }
24
25
      if (j == arr1_len && k == arr2_len)
26
         break;
27
   }

von zum Beispiel so (Gast)


Lesenswert?

arr1_len  = Länge des ersten Arrays
arr2_len  = Länge des zweiten Array

von c-hater (Gast)


Lesenswert?

Ich.hasse.java! schrieb:

> Wir sollen ohne irgendwelche "Addons" die Aufgabe schaffen.

Bücher werden nicht als "Addons" eingestuft. Du kannst sie nicht einfach 
linken, sondern nur unter Einsatz deines Gehirns.

Genau das ist, was der Prof erreichen will. Nunja, der ist scheinbar 
Optimist und nimmt an, du hättest tatsächlich eins...

von PittyJ (Gast)


Lesenswert?

c-hater schrieb:
> Ich.hasse.java! schrieb:
>
>> Wir sollen ohne irgendwelche "Addons" die Aufgabe schaffen.
>
> Bücher werden nicht als "Addons" eingestuft. Du kannst sie nicht einfach
> linken, sondern nur unter Einsatz deines Gehirns.
>
> Genau das ist, was der Prof erreichen will. Nunja, der ist scheinbar
> Optimist und nimmt an, du hättest tatsächlich eins...

Find ich schon bizarr. Ein Buch ist ein Addon, und darf nicht verwendet 
werden. Leute im Forum zu finden, die die Arbeit für einen erledigen, 
dass ist legitim.

Was lernen Studenten heute? Kein Wissen und Inhalte, sondern wie man die 
Arbeit am besten verteilt. Das werden bestimmt mal großartige Chefs....

Beitrag #6658542 wurde von einem Moderator gelöscht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.