Ordinamento per inserimento

di il
2 risposte

Ordinamento per inserimento

Ciao a tutti, è il mio primo post nel forum, spero di non scrivere troppe vaccate .
Volevo chiedere se qualcuno avesse la pazienza di capire e spiegarmi cosa ci sia di sbagliato in questo codice.

L'esercizio da svolgere richiede che si legga da standard input una sequenza di numeri (diversi tra loro) terminata da uno 0, e che si salvi in un array ordinato numericamente. Ogni volta che viene letto un intero bisogna scorrere l'array per trovare la sua posizione adatta, e far scorrere i numeri già memorizzati. Per comodità assumo che la sequenza sia lunga massimo 10 numeri.

E' un po' che ci sbatto la testa, ed ho provato un po' di soluzioni diverse (tutte fallite ), quindi scusatemi se il codice è confuso e molto poco elegante; provo ad aggiungere più commenti possibile.

#include<stdio.h>

int main (void){
     int a[10], n, cont=0, i, j, k, flag=0;  /* cont è il contatore di elementi inseriti; flag serve per evitare di inserire 2 volte il valore in a[] */

     printf("Inserire la sequenza di numeri (massimo 10 elementi, per terminare inserire '0'): ");

     do{
     scanf("%d", &n);
     if(n!=0){
          if(cont=0){   //inserisco il primo elemento in testa
               a[0]=n;
               flag=1;
          }
          else { //
               for(i=0; i<cont; i++){ //   scorro a[] alla ricerca della posizione corretta
                    if(n<a[i]){ // cerco il primo numero in a[] da scalare, insieme ai successivi
                         for(j=cont-1; j>=i: j--){ //a partire dall'ultimo elemento faccio scalare gli elementi
                              a[j+1]=a[j];
                         }
                         a[i]=n;
                         flag=1;
                         break; //ferma il ciclo for di 'i'
                    }
               }
          }
          if(flag=0)
               a[cont]=n;
          cont++;
          flag=0; // azzero flag per il prossimo elemento
     } while(n!=0);

     for(k=0; k<=cont; k++) //stampo l'array
          printf("%d\n", a[k]);
}

2 Risposte

  • Re: Ordinamento per inserimento

    Per cominciare (non sarà solo quello il problema ma inizia da questo ...) un confronto non si scrive così

    if(a=b)

    ma così

    if(a==b)
  • Re: Ordinamento per inserimento

    Ed invece era proprio solo questo, grazie 1000 oregon, mi era proprio sfuggito.

    Scemo io a copiare ed incollare parti di codice per fare prima

    EDIT: ho notato ora che nel codice originale avevo sbagliato solo l' "if(flag=0)", è riscrivendolo qui dall'altro pc dove lavoravo che ho aggiunto l'errore in "if(cont=0)"..
Devi accedere o registrarti per scrivere nel forum
2 risposte