Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [Algoritmo]Swap

  1. #1

    [Algoritmo]Swap

    Ho il seguente cod come implementazione del bubble sort:
    codice:
    // Dikiaro il prot. della funzione di confronto
    int confronta(int x, int y)
    {
         // questa funzione da risultati decrescenti.  è booleana e quindi
         // i rest 1 x vero o 0 x falso
         return(x < y);
    }
    
    void sort(int vettore[]; const int dim)
    {
         //Itera n volete per essere sicuro che il vettore sia ordinato
         for(int i = 0; i < dim; i++)
         {
            //Iniziando da un'estremità del vettore, confronta a coppie 
            // gli elementi del vettore e crea localmente il giusto ordine
            for(int j = 0; j < dim; j++)
            {
               if(confronta(vettore[j], vettore[j+1])) 
               {
                  swap(vettore[j], vettore[i]);
               }
            }
         }
    }
    Ma swap ................. come funzia?


    Tnk
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    315
    swap significa cambio di posto...
    in generale puo' essere una cosa cosi':
    codice:
    void swap(int a, int b) {
      int tmp = a;
      a = b;
      b = tmp;
    }
    Solo che cosi' facendo lo scambio avviene tra due variabili locali, e quindi inutile all'esterno.

    In C/C++ si possono passare gli indirizzi delle variabili e scambiare i contenuti, oppure passi l'indirizzo del vettore e i due indici. In C# non saprei proprio, ma immagino ci sia qualcosa di simile.
    Ciao,
    Lorenzo

  3. #3
    potrei usare i puntatori in C#................ma servirebbe?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Se vuoi invertire i valori della variabili stesse sei obbligato a lavorare sugli indirizzi come ha detto lelefante...

    codice:
    void swap(int *a, int *b)
    {
      int tmp = *a;
      *a = *b;
      *b = tmp;
    }

  5. #5
    int vettore[]; const int dim
    un puntoevirgola di troppo ??
    si comunque swap la puoi fare anche senza puntatori, e usando i template, cosi' usi una sola funzione:
    codice:
    template <class type>
    void swap(type &a, type &b)
    {
      type tmp = a;
      a = b;
      b = a;
    }
    questo pero' crea problemi se scabi 2 classi che usano la memoria dinamica.
    perche' viene richiamato il distruttore di tmp, che distrugge la memoria.
    Dovresti ridefinire l'operatore = per non creare problemi.

    Comunque, questa la puoi usare con tutti i tipi standard, senza problemi

    ciauz
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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