Modifica bubble sort

di il
1 risposte

Modifica bubble sort

Mi si chiede di migliorare l'efficienza dell'ordinamento vettoriale bubble
1- Invece di eseguire 9 confronti ogni passaggio, scalare, cioè 8 nel 2°, 7 nel 3° ecc...e qua ho risolto con un incremento.

2-Eliminare passaggi superflui, cioè alla fine di ogni PASSAGGIO verificare se siano stati eseguiti scambi, se non cè scambio tutti i dati sono nell'ordine giusto quindi uscire dal ciclo, altrimenti sarà necessario un passaggio in piu.


#include <stdio.h>
#include <conio.h>

#define SIZE 10

main()
{
      int a[SIZE] = {2,1,45,8,10,12,89,68,45,37};
      
      int i, pass, hold, z, counter;
      
      printf("Numeri in ordine originale\n");
      
      for(i = 0, z = 2; i <= SIZE - 1; i++)
      
        printf("%4d", a[i]);
        
      for(pass = 0; pass <= SIZE - 2; pass++)
      
      for(i = 0, counter = 0; i <= SIZE - 2; i++)
      
         if(counter == 0){
      
         if(a[i] > a[i + 1]){
                 
         hold = a[i];
         
         a[i] = a[i + 1];
         
         a[i + 1] = hold;
         
         counter++;
         }
         
         if(counter != 0){
                    
           counter = 0;
           
           i++; /*Incrementando di 1 i, cosi eseguo ad ogni passaggio un confronto in meno*/
           
           }
           
         else
         
             counter = 1;
      }
     
      printf("\nDati in ordine ascendente\n");
      
      for(i = 0; i <= SIZE - 1; i++)
      
        printf("%4d", a[i]);
        
        printf("\n");
        
        getch();
        
        }
Al 2° problema non riesco a trovare una soluzione a meno che non utilizzi un continue...

1 Risposte

  • Re: Modifica bubble sort

    Cosi dovrebbe essere corretto sotto ogni aspetto
    
    
    #include <stdio.h>
    
    #define SIZE 10
    
    main()
    {
          int a[SIZE] = {1,2,3,4,5,6,7,8,9,10};
          
          int i, pass, hold,z, counter;
          
          printf("Numeri in ordine originale\n");
          
          for(i = 0, z = 2; i <= SIZE - 1; i++)
          
            printf("%4d", a[i]);
            
          for(pass = 0; pass <= SIZE - 2; pass++){
          
          for(i = 0, counter = 0; i <= SIZE - 2; i++){
          
             if(a[i] > a[i + 1]){
                     
             hold = a[i];
             
             a[i] = a[i + 1];
             
             a[i + 1] = hold;
             
             counter++;
             }
             }
             
             if(counter == 0)
             
             break;
             
             else{
                  continue;
             
          i++; /*Incrementando di 1 i, cosi eseguo ad ogni passaggio un confronto in meno*/
          }
          }
          printf("\nDati in ordine ascendente\n");
          
          for(i = 0; i <= SIZE - 1; i++)
          
            printf("%4d", a[i]);
            
            printf("\n");
            
            return 0;
            
            }
Devi accedere o registrarti per scrivere nel forum
1 risposte