ciao a tutti,
Premetto che sto utilizzando una struttura di questo tipo.
Codice PHP:
typedef struct nodo {
int Frequenza;
struct nodo * next;
char Parola[100];
char Pos[10];
char Lemma[100];
} NODO;
ho creato un array di puntatori e puntatori per gestire meglio l'ordinamento e stavo usando una versione di quick sort che ordina la frequenza (intero)
Codice PHP:
void Swap (NODO **Array, int i, int j)
{ NODO * Temp;
Temp=Array[j];
Array[j]=Array[i];
Array[i]=Temp;
}
int Partizione(NODO **Array,int Low,int High)
{
int ValorePivot=Array[Low]->Frequenza;
while (Low<High)
{
while (Low<High && Array[High]->Frequenza<=ValorePivot)
--High;
Swap(Array,High,Low);
while (Low<High && Array[Low]->Frequenza>=ValorePivot)
++Low;
Swap(Array,High,Low);
}
return Low;
}
void QuickSort(NODO **Array,int Low,int High)
{
int Pivot;
if(Low<High)
{
Pivot=Partizione(Array,Low,High);
QuickSort(Array,Low,Pivot);
QuickSort(Array,Pivot+1,High);
}
}
Ora però volevo trasformare questo quicksort per visualizzare in ordine alfabetico il campo parola. Quindi molto banalmente ho cambiato la funzione partizione così:
Codice PHP:
int Partizione2(NODO **Array,int Low,int High)
{
char ValorePivot[100];
strcpy(ValorePivot,Array[Low]->Parola);
while (Low<High)
{
while (Low<High && ( strcmp(Array[High]->Parola,ValorePivot)>=0 ) )
--High;
Swap2(Array,High,Low);
while (Low<High && ( strcmp(Array[High]->Parola,ValorePivot)<=0 ) )
++Low;
Swap2(Array,High,Low);
}
return Low;
}
Purtroppo però non sembra funzionare, e da valori sballati. + in dettaglio ho notato che alla prima esecuzione escono risultati sballati, ma se richiamo la funzione + volte vedo le parole ordinarsi man mano. Cosa sbaglio? premettendo che la prima versione di quicksort funziona perfettamente?