Salve, è la prima volta che scrivo in questo forum, piacere di conoscervi. Sto imparando il C++, provengo già da una base di Basic e Pascal, e sto procedendo seguendo il manuale Deitel&Deitel. Sto provando a fare un esercizio sull'algoritmo quicksort. Il punto è che con l'algoritmo va tutto bene, ma un passo ricorsivo mi sta mandando ai matti perché manda il programma in loop e in crash (presumo per uno stack overflow). Vi metto il codice, la funzione quicksort è in fondo. Ho fatto tutte le varie prove di esclusione e ho trovato che la chiamata a funzione, alla fine del codice, crea il loop, la variabile "i" resta sempre 6 durante tutto il programma, sebbene venga incrementata (ho fatto varie prove con cout per determinare dove fosse il loop). Vi ringrazio molto.
//Programma esercizio 8.24
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void quickSort( int [], int, int );
int main()
{
int nArray[10] = {37, 2, 6, 4, 89, 8, 10, 12, 68, 45};
//cout <<"Inserire dieci valori da ordinare:\n\n";
//for ( int i = 0; i < 10; i++ )
//{
//cout <<"Inserire valore " << i + 1 <<": ";
//cin >> nArray[i];
//cout <<"\n\n";
//}
quickSort( nArray, 0, 9 );
cout <<"Ecco i valori ordinati:\n";
for ( int y = 0; y < 10; y++ )
cout << nArray[y] <<" ";
cout << endl << endl;
system ("pause");
return 0;
}
void quickSort( int v[], int a, int b ) //funzione quicksort, riceve array e indici
{
if ( a == b )
return;
int i = a;
int j = b;
int hold;
while ( i != j )
{
while ( ( v[i] < v[j] ) && ( i < j ) )
j--;
if ( i != j )
{
hold = v[i];
v[i] = v[j];
v[j] = hold;
i++;
}
while ( ( v[j] > v[i] ) && ( i < j ) )
i++;
if ( i != j )
{
hold = v[j];
v[j] = v[i];
v[i] = hold;
j--;
}
}
quickSort( v, a, i-- );
quickSort( v, i++, b );//questo pezzo manda in loop il programma!
}