Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84

    [C] Mi spiegate questa funzione?

    Salve studiando gli array ho trovato questo semplice programma per ordinare una lista di n numeri. Il programma in se è semplice ma non ho capito come lavora la funzione reorder che serve ad ordinare gli n elementi. Ecco il codice:

    #include <stdio.h>
    #define SIZE 100

    void reorder (int n, int x[]);

    main()
    {
    int i, n, x[SIZE];

    while(n != EOF)
    {
    printf("Quanti numeri vuoi ordinare? ");
    scanf("%d", &n);

    for(i=0; i<n; ++i) /*Legge i numeri della lista*/
    {
    printf("\nNumero %d: ", i+1);
    scanf("%d", &x[i]);
    }

    reorder(n, x); /*Chiama la funzione reorder mandando gli elementi n ed x (che rappresenta l'array)*/

    printf("\nLista ordinata di numeri:\n\n");

    for(i=0; i<n; ++i)

    printf("Numero %d: %d\n\n", i+1, x[i]);
    }
    }

    void reorder (int n, int x[])
    {
    int i, item, temp;

    for(item=0; item < n-1; ++item)
    for(i=item + 1; i<n; ++i)
    if (x[i] < x[item])
    {
    temp = x[item];
    x[item] = x[i];
    x[i] = temp;
    }
    return;
    }

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    ad ogni ciclio controlla se il valore attuale è minore di quello successivo...se si li scambia di posto.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Così a naso mi parrebbe un normale Bubble sort.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Originariamente inviato da XWolverineX
    ad ogni ciclio controlla se il valore attuale è minore di quello successivo...se si li scambia di posto.
    Si questo lo so. Ma vorrei sapere nel dettaglio cosa sono i vari passaggi della funzione

    void reorder (int n, int x[])
    {
    int i, item, temp;

    for(item=0; item < n-1; ++item)
    for(i=item + 1; i<n; ++i)
    if (x[i] < x[item])
    {
    temp = x[item];
    x[item] = x[i];
    x[i] = temp;
    }
    return;
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Beh ... cosa non capisci?

    Non penso che tu voglia spiegata una linea del tipo

    temp = x[item];

    ...

    Hai letto il documento del link che ti e' stato proposto per il Bubble sort?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Non capisco i due cicli for

    for(item=0; item < n-1; ++item)
    for(i=item + 1; i<n; ++i)

    perchè n-1 e sotto item + 1?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ti ripeto ... leggi il documento sul "bubble sort" ...

    I due cicli sono fatti in quel modo perche' un elemento [item] di un vettore deve essere confrontato sempre a partire dal seguente [item+1] e, ovviamente, alla fine si confronta il penultimo [n-2] con l'ultimo [n-1] ... (ricorda che i vettori sono in base 0 ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.