Array aufteilen in zwei neue

blubberblase

Mitglied
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!
 
Zuletzt bearbeitet:
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:
C++:
unsigned int i,j;
//...
srand(time(0)); //nur einmal am Anfang
//...
i=rand();
j=rand() % 12; //Nur Zahlen bis 12 (also 12 nicht mehr)
 
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
 
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:
C:
#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.
 
Zuletzt bearbeitet:
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 ;)
 
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.
 
Zurück