Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    Insertion Sort e ordinamento stringhe

    Allora ho scritto questo insertion sort per effettuare degli ordinamenti, sò che ci sono algoritmi più efficienti ma a me serviva questo. Questo algoritmo prende in ingresso un array di struutture di tipo
    codice:
    // DICHIARAZIONE STRUTTURA
    struct s
    {
             int numero;
             char *carattere;
    };
    
       
    int main
    {
       typedef struct s strutt;
    
       // DICHIARO ARRAY DI STRUTTURE DI3 ELEM
       // AFFETTO ASSEGNAZIONI
       strutt array[3];
       array[0].numero = 2;
       array[0].carattere = "prova";
    
       array[1].numero = 3;
       array[1].carattere = "ciao";
      
       array[2].numero = 1;
       array[2].carattere = "casa";
    
       // RICHIAMO ALGORITMO
       insertion_sort(array, 3);
    }
    
    
    // IMPLEMENTAZIONE DELL'INSERTION S.
    void insertion_sort(strutt *x, int length)
    {
      strutt key;
      int i,j=1,scambi=0;
      for(j=1;j<length;j++)
      {
         key = x[j];
         i=j-1;
         while(x[i].numero>key.numero && i>=0) 
         {
             x[i+1] = x[i];
             i--;
         }
         x[i+1] = key;
      }
    }
    Così come sono ora l'algoritmo funziona. Se però al posto di ordinare il campo numerico della struttura voglio ordinare il puntatore a char non funziona.
    Come posso modificare l'algoritmo per fargli ordinare anche in base ai caratteri?

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    bhè se vuoi ordinare rispetto al campo "carattere" basta modificare qualche cosina nel tuo codice...sostanzialmente mettere una strcmp() nel while() della funzione che ordina...fai però attenzione che ti conviene scrivere prima la condizione "i>=0" e poi la condizione della strcmp(), perchè tendenzialmente, durante l'esecuzione, se già la prima condizione non risulta soddisfatta, poichè è seguita da un && logico, autamaticamente esce dal ciclo e non effettua la seconda condizione, che potrebbe essere soggetta a bug in quanto la variabile i si decrementa a ogni cilco, quindi si correrebbe il rischio di un accesso in memoria non autorizzato e di conseguenza la presenza di un segmentation fault! penso di essermi spiegato...

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Il linguaggio va indicato anche nel titolo, come da Regolamento.

    Qui l'ho aggiunto io, in futuro ricordati di metterlo tu.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.