Zeiger-Array-Sortier-Algorithmus in C++
gehofft, ich kann ein wenig Beratung auf eine Sortier-Methode, die ich gemacht habe.
Dies ist nur ein test für ein anderes Programm, das ich mache und dieser test hat einen Fehler, den ich nicht herausfinden können. Der Zweck dieses code ist es, erstellen Sie ein int-pointer-array und das Sortieren der Zeiger in diesem array wird der Inhalt der regelmäßigen int-array.
Ist der bug für meine zweite for-Schleife, welche mir nicht erlaubt, zu verwenden j!=-1 daher nicht erlauben Sie mir, zu Sortieren das erste element des Arrays. Bitte helfen Sie. Danke!!
//create array
int c[8] = {3,1,5,7,8,2,6,4};
//create pointer array
int *newptr[8];
for(int k = 0; k<8; k++)
{
newptr[k] = &c[k];
}
//sort pointer array
for(int j = 0; j<8; j++)
{
cout << "test1\n\n";
cout << *newptr[j] << "and" << *newptr[j+1];
for(;*newptr[j] < *newptr[j+1] && j!=0; j--)
//using j!=-1 doesn't work which causes me to not be able to sort the first element
//in the array properly
{
cout<< "test2";
int *temp;
temp = newptr[j+1];
newptr[j+1] = newptr[j];
newptr[j] = temp;
}
}**
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angelegenheiten.
Ändern
zu:
Vermutlich der bug ist etwas, das bewirkt, dass der code zum Absturz zu bringen. Dies geschieht, weil der Ausdruck in der for-Schleife ausgewertet wird von Links nach rechts. So
*newptr[j]
ausgewertet vor überprüfen, obj != -1
. So ist es denkbar, dass irgendwannj
gleich-1
wenn*newptr[j]
evaluiert, und das ist illegal.Ändern der Reihenfolge macht einen Unterschied für ein zweiter Grund: short-circuit-evaluation.
Beim auswerten zwei ein Ausdruck aus zwei Bedingungen
A
undB
C++ nicht immer bewerten müssen beide Bedingungen.Zum Beispiel in der Aussage
wenn
A
ausgewertet werdenfalse
offensichtlich dannA && B
nicht bewerten kann, zutrue
unabhängig davon, wasB
ausgewertet. SoB
's Wert ist noch nie überprüft. Also in deinem Fall, in der die expressionwenn
j != -1
false ist, wird C++ nicht brauchen, um zu bewerten den rest des Ausdrucks, um zu wissen, dass der gesamte Ausdruck false ist. So*newptr[j]
nie passiert, und Sie nicht bekommen, den Fehler zu finden.Wie bereits von maditya das problem ist, dass der Ausdruck versucht, auf einen ungültigen index auf, bevor Sie den index selbst, aber ich sehe, die Frage ist tagged-C++. Sie haben eine explizite Grund, nicht mit STL?
oder sogar noch kürzer, in C++11: