?
Ben schrieb:
Funktion 4 rekursiv: mischen(m,a,n,b,c)
- Es sollen die Elemente zweier aufsteigend sortierter Arrays
a (m Elemente) und b (n Elemente)
zusammengemischt und in einem Array c aufsteigend sortiert
gespeichert werden.
Beispiel: a: 1 4 5 6 9 b: 2 4 11 Ergebnis in c: 1 2 4 4 5 6 9 11.
Wobei ich bei der Funktion 4 eure Hilfe brauche, denn ich bekomm das mit dem sortiern nicht gebacken.
#include <iostream>
using namespace std;
double mischen(int limit,int limit2,int limit3, double array1[],double array2[],double array3[])
{
limit3=(limit+limit2); //anzahl der gesamten arrays ermitteln
int a=limit-1,b=limit2-1,c=limit3-1;
if(limit==0 && limit2==0)
{
return array3[0];
}
if(array1[a]>array2[b]) //wenn a größer als b ist wird a kopiert
{
array3[c]=array1[a]; //kopieren und runterzählen
a--;
c--;
return mischen(limit-1,limit2,limit3-1,array1,array2,array3);
}
else
{
array3[c]=array2[b]; //kopieren und runterzählen
b--;
c--;
return mischen(limit,limit2-1,limit3-1,array1,array2,array3);
}
}
Versteh' ich nicht... Die Signaturen aus der Aufgabe und bei Dir sind unterschiedlich...Aber gut, das ist ein kosmetischer Makel - wobei wofür brauchst Du noch limit3?
Und diese ganzen Hilfsvariablen?! Kopierst Du von hinten? Und die Kommentare stimmen doch auch nicht ("wenn a größer als b...")? Sehr verworren.
Mit ein bißchen Zeigerarithmetik läßt sich das ganze elegant lösen, so sähe mein Gerüst aus:
void mischen(std::size_t m, const double* in1, std::size_t n, const double* in2, double* out){
if(m==0){
// kopiere Rest von in2
return;
}
if(n==0){
// kopiere Rest von in1
return;
}
if(*in2 < *in1){
// Wert kopieren und Rekursion mit neuem n, in2 und out
} else {
// Wert kopieren und Rekursion mit neuem m, in1 und out
}
}