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. Ihre mergsesort Erklärung sollte void mergesort(int thelist[], size_t len) und sizeof sollte nirgendwo in dieser Funktion. Weiters kann ich mir nur vorstellen, Sie sind mit globals für lft und rght, 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, da sizeof(thelist) ist die Größe eines Zeigers. Du musst ein zusätzliches argument - size_t size sagt die Größe der thelist 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.
InformationsquelleAutor William | 2014-01-03
Schreibe einen Kommentar