Burbuja Optimizado

Implementa una mejora al método de ordenamiento burbuja. Este método recorre todo el arreglo comparando cada uno de los elementos con el elemento siguiente e intercambiándolo de ser necesario. Al finalizar la iteración el elemento mayor queda ubicado en la última posición, mientras los elementos menores ascienden una posición.


La mejora es que, como al final de cada iteración el elemento mayor queda situado en su posición, ya no es necesario volverlo a comparar con ningún otro número, reduciendo así el número de comparaciones por iteración.


Ejemplo: 

Algoritmo de burbuja optimizado

public static int[] ordenacionBurbuja(int vec[]){
                final int N=vec.length;
                for(int i=N-1;i>0;i--){
                        for(int j=0;j<i;j++){
                                if(vec[j]>vec[j+1]){
                                        int temp=vec[j];
                                        vec[j]=vec[j+1];
                                        vec[j+1]=temp;
                                }
                        }
                        System.out.print("iteracion: "+(N-i)+": ");imprimirVector(vec);System.out.println();
                }
                return vec;
        }

Implementación

public class BurbujaOptimizado {

        public static void main(String[] args) {
                int vec[]={45,17,23,67,21};
                System.out.println("Vector original");
                imprimirVector(vec);
                System.out.println("\n");
                vec=ordenacionBurbuja(vec);
                imprimirVector(vec);
        }

        public static int[] ordenacionBurbuja(int vec[]){
                final int N=vec.length;
                for(int i=N-1;i>0;i--){
                        for(int j=0;j<i;j++){
                                if(vec[j]>vec[j+1]){
                                        int temp=vec[j];
                                        vec[j]=vec[j+1];
                                        vec[j+1]=temp;
                                }
                        }
                        System.out.print("iteracion: "+(N-i)+": ");imprimirVector(vec);System.out.println();
                }
                return vec;
        }
        
        public static void imprimirVector(int vec[]){
                for(int i=0;i<vec.length;i++){
                        System.out.print(vec[i]+" ");
                }
        }

}