|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 7
|
[C++] QuickSort
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: 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);
}
}
Codice:
int ind[MAXNODI]; int distanzaEuclidea[MAXNODI]; QuickSort(distanzaEuclidea, ind, 0, numnodi - 1); Graizie Ciao |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Riguardati come funziona il while
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 7
|
Ho ricontrollato il while. Veramente mi pare che funzioni, anche perchè quello che sto facendo è un porting da c# e c++, e l'algoritmo è esattamente lo stesso...
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
while (A[ind[j]] > x); do i = i + 1;
while (A[ind[i]] < x); if (i < j) Questi due cicli non tornano, non ci vuole il ; e non serve il do. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 7
|
Codice:
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);
forse perchè avevo indentato male, ora ho messo le {}...ma non cè nessun do in più. Comunque a parte questo, la mia questione originale è un'altra: se io passo alla funzione un vettore poi nella funzione quicksort, mi viene ordinato "quel" vettore (nel mio caso distanzaEuclidea) oppure una sua replica A[]?? |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi aveva tratto in inganno l'indentazione
Comunque viene ordinato il vettore originale, perché i vettori vengono passati per puntatore. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
ma ind[] a che ti serve?
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
ma ind[] a che ti serve?
EDIT: mi sa che ho capito, ordinando ind, tu ordini gli indici, lasciando invariato l'array originale. per funzionare, ind dovrebbe contenere, inizialmente, tutti i naturali da 0 a MAXNODI in ordine crescente; considera che successivamente, per accedere in modo ordinato all'array, dovrai sempre passare per ind, e non è molto comodo. Ultima modifica di Furla : 13-12-2008 alle 17:32. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:51.




















