Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142

    [C] quicksort ordine alfabetico (stringhe)

    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 iint 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)>=)  )
                --
    High;
            
    Swap2(Array,High,Low);
            while (
    Low<High && ( strcmp(Array[High]->Parola,ValorePivot)<=)  )
                ++
    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?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: [C] quicksort ordine alfabetico (stringhe)

    Credo che al posto di Array[High] nel secondo ciclo while ci vada Array[Low], se non altro per conformità col primo esempio che hai postato.

    codice:
    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[Low]->Parola,ValorePivot)<=0 )  )
                ++Low;
            Swap2(Array,High,Low);
        }
    
        return Low;
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    eheh che idiota che sono... me ne sono accorto 2sec fa e sono corso qui sperando di riuscire a cancellare il post prima che lo vedesse qualcuno e non ce l'ho fatta

    cmq grazie mille per la risposta

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.