Bug nell'ordinare un array

di il
2 risposte

Bug nell'ordinare un array

Dovrei scrivere un programma in C che mi ordini un array. Questa è la mia prima bozza che ho scritto senza pensarci troppo quindi priva di ogni tipo di ottimizzazione:
#include <stdio.h>

#define N 4

main()
{
  int v[N];
  int i, j, temp;

  printf("Immetti un array di dimensione %d\n", N);
  for(i=0; i<N; i++){
    scanf("%d" , &v[i]);
  }

  for(i=0; i<N; i++){
    for(j=0; j<N; j++){
      if((j>i) && (v[j]<v[i]))
        temp=v[i];
        v[i]=v[j];
	v[j]=temp;      
    }
  }

  for(i=0; i<N; i++){
    printf("%d ", v[i]);
  }
  printf("\n");

}
Il problema è che se do ad esempio in input l'array 4 3 2 1, ottengo in output 3 3 3 3, cosa improbabile. Qualcuno riesce a capire dov'è il bug? Grazie.

2 Risposte

  • Re: Bug nell'ordinare un array

    Sarà che è notte..ma se non sbaglio ti sei scordato qualche parentesi graffa nell'if all'interno del secondo for
    Questo è come l'hai scritto tu :
    
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
          if((j>i) && (v[j]<v[i]))
            temp=v[i];
            v[i]=v[j];
       v[j]=temp;      
          }
      }
    Questo è come lo scriverei io :
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
          if( j>i && v[j]<v[i])
          {
            temp=v[i];
            v[i]=v[j];
            v[j]=temp;  
          }    
        }
      }
    Come l'hai scritto tu, in caso la condizione dell'if risultasse vera, eseguirebbe solo il primo comando successivo, e quindi gli altri due scambi li fa a prescindere dall'if, creando confusione nell'array e a volte anche andando a pescare valore che non hai inserito.
  • Re: Bug nell'ordinare un array

    
      for(i=0; i<N-1; i++)
        for(j=i+1; j<N; j++)
    	  if(v[j]<v[i])
    	  {
                 temp=v[i];
                 v[i]=v[j];
                 v[j]=temp;      
          }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte