pippofrank
13-12-2008, 15:08
Salve dovrei realizzare quicksort (senza utilizzare la qsort di c++).
La situazione è questa: ho un vettore di interi da ordinare che passo alla funzione quicksort. La funzione dovrebbe ordinarmi il vettore che gli passo, ma in realtà ne crea una copia...spero di essermi spiegato..
Ho provato con i puntatori, ma forse sbaglio qualcosa..
Riporto qui il codice:
void Test::QuickSort(int A[],int ind[] ,int p,int r)
{
int q;
if (p < r)
{
q = partition(A, ind, p, r);
QuickSort(A, ind, p, q);
QuickSort(A, ind, q + 1, r);
}
}
int Test::partition(int A[], int ind[], int p, int r)
{
int i, j, temp;
int x;
x = A[ind[p]];
i = p - 1;
j = r + 1;
while (true)
{
do j = j - 1;
while (A[ind[j]] > x); do i = i + 1;
while (A[ind[i]] < x); if (i < j)
{
temp = ind[i];
ind[i] = ind[j];
ind[j] = temp;
}
else return (j);
}
}
dentro il main richiamo la funzione in questo modo:
int ind[MAXNODI];
int distanzaEuclidea[MAXNODI];
QuickSort(distanzaEuclidea, ind, 0, numnodi - 1);
Vorrei quindi che QuickSort mi restituisse lo stesso vettore "distanzaEuclidea" ordinato..
Graizie
Ciao
La situazione è questa: ho un vettore di interi da ordinare che passo alla funzione quicksort. La funzione dovrebbe ordinarmi il vettore che gli passo, ma in realtà ne crea una copia...spero di essermi spiegato..
Ho provato con i puntatori, ma forse sbaglio qualcosa..
Riporto qui il codice:
void Test::QuickSort(int A[],int ind[] ,int p,int r)
{
int q;
if (p < r)
{
q = partition(A, ind, p, r);
QuickSort(A, ind, p, q);
QuickSort(A, ind, q + 1, r);
}
}
int Test::partition(int A[], int ind[], int p, int r)
{
int i, j, temp;
int x;
x = A[ind[p]];
i = p - 1;
j = r + 1;
while (true)
{
do j = j - 1;
while (A[ind[j]] > x); do i = i + 1;
while (A[ind[i]] < x); if (i < j)
{
temp = ind[i];
ind[i] = ind[j];
ind[j] = temp;
}
else return (j);
}
}
dentro il main richiamo la funzione in questo modo:
int ind[MAXNODI];
int distanzaEuclidea[MAXNODI];
QuickSort(distanzaEuclidea, ind, 0, numnodi - 1);
Vorrei quindi che QuickSort mi restituisse lo stesso vettore "distanzaEuclidea" ordinato..
Graizie
Ciao