Blog Informatica & Programmazione

  1. Algoritmo di ordinamento Bubble Sort - Linguaggio C

    Avatar
    Tags
    Algoritmi
    C
    By giratina23 il 8 July 2013
     
    17 Comments   77,892 Views
    .

    Algoritmo di ordinamento Bubble Sort - Linguaggio C



    Gli algoritmi di ordinamento nel linguaggio C vengono utilizzati per ordinare una serie di elementi all'interno di un array, solitamente numeri.
    L'ordinamento può essere in ordine crescente, ovvero con i numeri ordinati dal più piccolo al più grande, oppure decrescente, ovvero con i numeri ordinati dal più grande al più piccolo.
    L'ordinamento permette di gestire con più facilità un insieme di elementi e l'algoritmo più diffuso (e forse anche uno dei migliori da imparare) è l'algoritmo Bubble Sort.

    La logica di questo algoritmo è quella di confrontare ogni elemento di un array (partendo dalla posizione 0), con il valore dell'elemento successivo, poi a seconda dell'ordinamento che si vuole realizzare tra decrescente e crescente, viene inserito in ultima posizione sempre l'elemento più piccolo della lista (decrescente) o più grande (crescente).
    Ovviamente l'ultima posizione viene decrementata ogni volta che si arriva a posizionare un valore nell'ultima posizione di un array, altrimenti si sovrascrive continuamente l'ultimo elemento e non avviene alcun ordinamento!

    Ecco un piccolo esempio per capire la logica di questo algoritmo di ordinamento bubblesort crescente:
    CITAZIONE
    ho il vettore vet[3] = {6,4,3,8}
    Confronto vet[0] con vet[1] // 6 > 4 quindi inverto i due numeri nell'array e ottengo vet[3] = {4,6,3,8}
    Confronto vet[1] con vet[2] // 6 > 3 quindi inverto i due numeri nell'array e ottengo vet[3] = {4,3,6,8}
    Confronto vet[2] con vet[3] // 6 < 8 quindi i due numeri rimangono invariati nell'array.
    Ora si decrementa l'ultima posizione, infatti non è più 3 dove è presente il valore 8, ma è 2 dove si presenta il valore 6 (questo perchè in ogni caso siamo già sicuri che l'elemento in ultima posizione è il numero maggiore della lista, invece il numero 6 è ordinato solo in questo caso).
    Confronto vet[0] con vet[1] // 4 > 3 quindi inverto i due numeri nell'array e ottengo vet[3] = {3,4,6,8}
    Confronto vet[1] con vet[2] // 3 < 6 quindi i due numeri rimangono invariati nell'array = {3,4,6,8}
    Decremento l'ultima posizione e diventa 1.
    Confronto vet[0] con vet[1] // 3 < 4 quindi i numeri rimangono invariati nell'array = {3,4,6,8}
    Output: 3-4-6-8

    Ora passiamo al codice, in questi due esempi vi mostrerò come realizzare un Bubble Sort crescente e uno decrescente

    Ordinamento Bubble Sort crescente:
    CODICE
    void bubblesort(int v[], int n) {
    int i,k;
    int temp;
    for(i = 0; i<n-1; i++) {
     for(k = 0; k<n-1-i; k++) {
             if(v[k] > v[k+1]) {
              temp = v[k];
              v[k] = v[k+1];
              v[k+1] = temp;
             }
     }
    }
    }


    Ordinamento Bubble Sort decrescente
    CODICE
    void bubblesort(int v[], int n) {
    int i,k;
    int temp;
    for(i = 0; i<n-1; i++) {
     for(k = 0; k<n-1-i; k++) {
             if(v[k] < v[k+1]) {
              temp = v[k];
              v[k] = v[k+1];
              v[k+1] = temp;
             }
     }
    }
    }


    ovviamente è anche possibile partire a fare i confronti dall'ultima posizione, sta a voi scegliere cosa preferire :P
      Share  
     
    .
Comments
  1. gianmarco3
    view post
     
    .

    User deleted

    User deleted


    grazie tantissime
     
    Top
    .
  2. GCCallie
    view post
     
    .

    User deleted

    User deleted


    grazie :woot:
     
    Top
    .
  3. nicoo1
    view post
     
    .

    User deleted

    User deleted


    bau
     
    Top
    .
  4. informatzi
    view post
     
    .

    User deleted

    User deleted


    questo è il selesort
     
    Top
    .
  5. LiLo.
    view post
     
    .

    User deleted

    User deleted


    Non è corretto dire che è l'algoritmo più diffuso e il migliore da utilizzare.. niente di più falso. E' il peggiore per quanto riguarda la complessità intesa come tempo di esecuzione.
     
    Top
    .
  6. semprehappy:)
    view post
     
    .

    User deleted

    User deleted


    a me non va :( sono triste
     
    Top
    .
  7. ciao7
    view post
     
    .

    User deleted

    User deleted


    lol
     
    Top
    .
  8. brucaliffo1
    view post
     
    .

    User deleted

    User deleted


    ganzo
     
    Top
    .
  9. swdgisdvgfi
    view post
     
    .

    User deleted

    User deleted


    ciao fra
     
    Top
    .
  10. motte
    view post
     
    .

    User deleted

    User deleted


    bella zio, ci sta a manetta
     
    Top
    .
  11. tua madre
    view post
     
    .

    User deleted

    User deleted


    aweiooo ggajgajs

    sono giaglonese
     
    Top
    .
  12. luisi
    view post
     
    .

    User deleted

    User deleted


    :alienff: :alienff: :alienff: :alienff: :alienff: :alienff:
     
    Top
    .
  13. Andrea Iacobino
    view post
     
    .

    User deleted

    User deleted


    perche' 2 cicli for? sia per i che per k intendo, non ne basta 1?
     
    Top
    .
  14. Roozeev
    view post
     
    .

    User deleted

    User deleted


    Grazie!
     
    Top
    .