# Array aufteilen in zwei neue



## blubberblase (23. November 2010)

Hallo Leute,
ich erzeuge ein Array mit Zufallszahlen. Dieses Array soll nun in zwei geteilt, dann beide sortiert und anschließend beide wieder zu einem Zusammengefügt werden. Über Sinn oder Unsinn kann man sich jetzt streiten 

EDIT: Das Programm soll nachher in mehreren Prozessen aufgeteilt werden, daher das aufteilen in zwei Arrays.

Ich stehe total aufn Schlauch und weiß nicht wie ich das anstellen soll. Habe sonst nie was mit C zu tun...eher andere Programmiersprachen  Gibt es da irgendwie eine Split und Merge Funktion in C? 

Falls einer Beispiele, Links zu diesem Thema oder sowas hat, dann nur her damit! Vielen Dank!

Danke und Grüße!


----------



## sheel (23. November 2010)

Ein Array in C hat überhaupt keine eigenen Methoden wie in C#, Java oder Ähnlichem...es ist nur eine Menge von einzelnen Variablen.
Aber solche Dinge kann man mit ein paar Schleifen auch realisieren.

Gibts irgendein Kriterium, wo de Arrays auseinander geteilt werden sollen?
Was für Zahlen sollens eigentlich sein? Normale ints, Kommazahlen etc...?
Sollen die Elemente beim wieder-zusammenfügen wieder sortiert zusammenkommen oder nur die zwei Einzelarrays sortiert sein?

Für Zufallszahlen gibts die Funktionen srand (zum Initialiseren) und rand
zB:

```
unsigned int i,j;
//...
srand(time(0)); //nur einmal am Anfang
//...
i=rand();
j=rand() % 12; //Nur Zahlen bis 12 (also 12 nicht mehr)
```


----------



## blubberblase (23. November 2010)

Danke für deine schnelle Antwort!

Das mit den Zufallszahlen habe ich schon mit srand() hinbekommen und auch das Speichern dieser Zahlen in einem Array funktioniert. Danke  Nur halt das Aufteilen bereitet da Probleme 

Die zwei sortierten Hälften sollen dann wieder sortiert zusammenkommen, richtig.


Es sind int Zahlen


----------



## CPoly (23. November 2010)

Du musst es nicht wirklich teilen. Übergib der Sortier-Funktion einfach den Pointer auf den Anfang (das muss ja nicht der "echte" Anfang des Arrays sein) und die Länge (wenn du es halbieren willst, wäre das entsprechend die Hälfte der Größe).

Edit:

```
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 20

void machWas(int *, int);

int main(int argc, char *argv) {
	int *arr = (int *)calloc(sizeof(int), LENGTH);
	int i;
	
	for(i=0; i<LENGTH; i++) {
		arr[i] = i;
	}
	
	machWas(arr, LENGTH/2);
	machWas(arr+(LENGTH/2), LENGTH/2);
	
	return 0;
}

void machWas(int *arr, int length) {
	int i;
	
	for(i=0; i<length; i++) {
		printf("%d,", arr[i]);
	}
	
	printf("\n");
}
```

bei ungerader Länge oder Anzahl an Teilen musst du mit den Indizes aufpassen.

Edit2:
*Afaik* wird das mit Prozessen nicht so trivial funktionieren. Da musst du mit shared memory arbeiten, da fork() ja auch das Array kopiert.


----------



## blubberblase (23. November 2010)

Wow, danke für die sehr ausführliche Antwort! Ich werde mir das mal etwas genauer anschauen und versuchen es für meine Zwecke anzupassen. Bis jetzt habe ich immer seeehr großen Bogen um Zeiger gemacht. Wahrscheinlich ist C daher nicht so mein Fall


----------



## CPoly (23. November 2010)

Die Grundidee würde auch in jeder anderen Sprachen funktionieren. Nur würdest du dort neben dem Array zwei weitere Parameter übergeben, nämlich Start- und Endindex. In C bietet es sich aber an es so zu machen.


----------



## RudolfG (24. November 2010)

Das hört sich für mich ganz nach Mergesort an. 

Gruß
Rudolf


----------

