Rekursives Merge-Sort In C++
Ich versuche code ein merge-sort in c++, sondern bauen es gibt mir eine Warnung, dass es rekursiv ist, und ausgeführt, es gibt ein stack-überlauf. Ich verstehe nicht, wo ich falsch mache.
void mergesort(int thelist[]) {
if (sizeof(thelist) <= 1)
return;
int middle = (sizeof(thelist) / 2);
for (i = 0; i <= sizeof(thelist); i++){
if (i < middle)
lft[i] = thelist[i];
else if (i >= middle)
rght[i-middle] = thelist[i];
}
mergesort(lft);
mergesort(rght);
merge(lft, lft + 10, rght, rght + 10, sortedlist);
}
sizeof()
bedeutet nicht, was Sie denken, es bedeutet.- Warum gibt es eine
10
begraben in Ihrem code. Sie müssen übergeben Sie die Sequenz-Länge.sizeof(theist)
ist nicht das tun, was Sie denken, es ist. Ihremergsesort
Erklärung solltevoid mergesort(int thelist[], size_t len)
undsizeof
sollte nirgendwo in dieser Funktion. Weiters kann ich mir nur vorstellen, Sie sind mit globals fürlft
undrght
, und ich kann Ihnen sagen, jetzt es ist nicht zu tun, was Sie denken, es wird. - Sie haben eine ständig endende rekursive Schleife als
if (sizeof(thelist) <= 1)
ist immer false, dasizeof(thelist)
ist die Größe eines Zeigers. Du musst ein zusätzliches argument -size_t size
sagt die Größe derthelist
array. - Wie sind Sie den code testen? Was ist der stack-trace? Wo ist Zusammenführen? Je mehr Informationen Sie liefern, desto besser können wir werden, Ihnen zu helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, um die Handhabung der verschiedenen Teile der
int []
durch den Aufruf der gleichen Funktion, zu definieren versuchen, Ihre Funktion alsBezüglich der
sizeof(thelist)
Teil, wenn Sie wollen, um die Größe einesint []
. Sie benötigenstatt
Beispiel:
PS: Sie müssen auch zweimal überlegen, auf Ihre code-Logik-und umschreiben. Sie die main-Funktion sollte wie folgt aussieht:
sizeof thelist/sizeof int
wird nicht funktionieren. (in C, aber ich bin mir fast sicher in C++ auch)sizeof()
um die Größe. Sie haben Recht damit, dass er/Sie nicht nur diesen in den code, kombiniert mit #2 statt.sizeof
mitsizeof/sizeof
, und mir scheint es, Sie sind darauf hindeutet, es zu tun in der Funktion.Merge()
zum Zusammenführen von zwei sortierten arrays zusammen hier. Sie sollten in der Lage sein zu liefern.