T
Habe das Ganze jetzt etwas anders gestaltet.
Ich denke, dass das nun eher an der Aufgabenstellung liegt?
void sortMerge(int n, int *a){
void merge(int *a,int p,int *b,int q, int *c,int n);
if (n>1) { // wenn Array mehr als 1 Element enthält
int *b = new int[n/2];
int *c = new int[(n + 1)/2];
int i;
for(i=0; i < n/2; i++) { // Erste Hälfte in b kopieren
b[i] = a[i];
}
for(i=n/2; i < n; i++) { // Zweite Hälfte in c kopieren
c[i - n/2] = a[i];
}
// Arrays einzeln rekursiv sortieren
sortMerge(n/2, b);
sortMerge(n-n/2, c);
// Arrays b und c zusammenfügen
merge(b,n/2,c,n-n/2,a,n);
// Arrays b und c wieder löschen
delete b;
delete c;
}
}
void merge(int *b,int p,int *c,int q, int *a,int n)
{
int i=0,j=0,k=0;
while(i<p && j<q) // solange Arrays b und c noch Elemente enthalten
{
if(b[i]<=c[j]) { // wenn i-tes Element von b größer-gleich i-tes Element von c
a[k]=b[i];
i++;
} else {
a[k]=c[j];
j++;
}
k++;
}
if(i==p) { // restlichen Elemente von c in a kopieren
while(j<q) {
a[k]=c[j];
j++;
k++;
}
} else { // restlichen Elemente von b in a kopieren
while(i<p) {
a[k]=b[i];
i++;
k++;
}
}
}
Vielen Dank schon mal.