...
che evidentemente non rispetta le suddette condizioni.
Come mai?
L'errore è nel codice o nel mio ragionamento?
In ogni caso ho provato ad implementare l'algoritmo per conto mio:
#include <iostream>
#include <ctime>
using namespace std;
void mostra_array(int *v, const unsigned int &n)
{
for(unsigned int i = 0; i < n; ++i)
{
cout << v[i] << " ";
}
cout << endl;
}
//ORDINE CRESCENTE ---> ordine = 1
//ORDINE DECRESCENTE ---> ordine = -1
void quick_sort(int *v, unsigned int sx, unsigned int dx, const int &ordine)
{
unsigned int pivot = sx + rand() % (dx - sx + 1);
unsigned int SX = sx;
unsigned int DX = dx;
while(true)
{
while(SX < pivot && ordine * v[SX] <= ordine * v[pivot])
{
++SX;
}
while(DX > pivot && ordine * v[DX] >= ordine * v[pivot])
{
--DX;
}
if(SX == DX)
{
break;
}
else
{
swap(v[SX], v[DX]);
if(SX == pivot)
{
pivot = DX;
++SX;
}
else if(DX == pivot)
{
pivot = SX;
--DX;
}
else
{
++SX;
--DX;
}
}
}
if(pivot > sx + 1)
{
quick_sort(v, sx, pivot - 1, ordine);
}
if(pivot < dx - 1)
{
quick_sort(v, pivot + 1, dx, ordine);
}
}
int main()
{
srand(time(0));
const int n = 7;
int v[n] = {5, 3, 2, 4, 1, 9, 4};
quick_sort(v, 0, n - 1, 1);
mostra_array(v, n);
cout << endl;
quick_sort(v, 0, n - 1, -1);
mostra_array(v, n);
}
Secondo voi va bene? Potrei ottimizzarlo in qualche modo?
Cmq per quanto riguarda la questione iniziale del topic, non basta cambiare semplicemente il segno della diseguaglianza?! Nel mio codice faccio in questo modo e sembra funzionare bene...