Elenet.net
0 voti
In questo algoritmo di ordinamento 

#include<iostream.h>
#include<stdlib.h>

int main()
{
  int A[20],i,dim;
  int continua=1,sup,k;
  int app;
  
  //Richiesta della dimensione del vettore
  do
   {
    printf("Inserisci il numero di elementi da ordinare (max 20) "); 
    scanf("%d",&dim);
   }
  while(dim<0 || dim > 20); 
   
  //Inserimento degli elementi     
  for(i=0; i<dim;i++)
  {
    printf("Elemento %d:",i+1);
    scanf("%d%",&A[i]);
  }  
  
  //Ordinamento del vettore
  k=dim-1;                      

// Non ho capito perchè K prende dim-1 

  while(continua)
  {
    sup=k;
    continua=0;
    for(int i=0; i<sup; i++)
    {
      if(A[i]>A[i+1])
      {
	  app = A[i];
	  A[i] = A[i+1];
	  A[i+1] = app;
	  continua=1;
	  k=i;
      }
     }    
   }
   
  //Stampa del vettore ordinato 
  printf("Vettore ordinato\n");
  for(i=0; i<dim;i++)
  {
    printf("%d\n",A[i]);
  }
  system("pause");
}
quesito posto 8 Marzo 2013 in Classe terza da Gianni Messina Esperto (736 punti)
  

2 Risposte

+3 voti
Risposta migliore

Inoltre  k=i viene utilizzato per memorizzare la posizione dell'ultimo scambio.

Infatti se non è necessario fare altri scambi dalla posizione k in poi, questo significa che gli elementi dopo k sono già ordinati e quindi non è necessario controllarli. 

In questo modo l'algoritmo evita di fare controlli inutili riducendo al minimo i passi.

 

 

risposta inviata 9 Marzo 2013 da Emanuele Rizzo Esperto (238 punti)
Selezionata 10 Marzo 2013 da Gianni Messina
Qual è la complessità di questo algoritmo?
0 voti
k serve a memorizzare l'ultima posizione nella quale è possibile fare lo scambio.

Inizialmente prende il numero di elementi (dim) -1 essendo l'ultima posizione possibile per scambiare 2 elementi.
risposta inviata 9 Marzo 2013 da Roberto De Rosalia Corsista (124 punti)

Domande correlate

+1 voto
3 risposte
quesito posto 8 Marzo 2013 in Classe terza da Gianni Messina Esperto (736 punti) | 249 visite
+6 voti
3 risposte
quesito posto 20 Gennaio 2016 in Classe terza da Gianni Messina Esperto (736 punti) | 3,432 visite
+9 voti
6 risposte
quesito posto 20 Gennaio 2016 in Classe terza da Gianni Messina Esperto (736 punti) | 551 visite
778 domande
1,565 risposte
639 commenti
1,445 utenti