es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java ¿Cómo repito el ordenamiento hasta que no se realicen intercambios en el bubble sort?

Estoy tomando 10 elementos y realizando una ordenación de burbuja en ellos. Quiero agregar un algoritmo que repita la ordenación hasta que no se necesiten intercambios para hacerlo más eficiente.
Básicamente quiero:
– repetir hasta que no se realicen intercambios en un paso
– Para los elementos 1 a (n-1)
– comparar el contenido del elemento 1 con el contenido del siguiente valor
– si el valor 1 es mayor que el valor 2
– entonces intercambiar los valores

Esto es lo que he hecho hasta ahora:

“` public static void main(String[] args)
{

<pre><code>//crear arreglo
int[] iList = new int[10];
Scanner sc = new Scanner(System.in);

//tomar entrada del arreglo de 10 números

System.out.println("Ingrese un arreglo de números");

for(int i = 0; i< 10; i++ )
{
int num = i + 1;
System.out.println("Ingrese el número " + num);
iList[i] = sc.nextInt();

}

//Ordenar por burbuja el arreglo

System.out.println("El arreglo =");

for(int a = 0; a < iList.length; a++ )
{
for(int b = a+1; b < iList.length; b++)
{
if(iList[a] > iList[b])
{
int iTemp = iList[a];
iList[a] = iList[b];
iList[b] = iTemp;

}
System.out.println("Progreso = " + Arrays.toString(iList) );
}

}
</code></pre>

} “`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para optimizar el algoritmo de ordenamiento de burbuja, necesitamos agregar un bucle de repetición que verifique si se han realizado intercambios en un pase. Hacemos esto introduciendo una variable booleana que se establece en verdadero si intercambiamos elementos. El bucle continúa hasta que hagamos un pase completo por la matriz sin intercambiar ningún elemento.

    El código actualizado se vería algo así:

    public static void main(String[] args) {
    
        int[] iList = new int[10];
        Scanner sc = new Scanner(System.in);
    
        // Ingresar los valores del array
        System.out.println("Ingresar un array de números");
    
        for(int i = 0; i < 10; i++ ) {
            int num = i + 1;
            System.out.println("Ingresar el número " + num);
            iList[i] = sc.nextInt();
        }
    
        // Ordenamiento de burbuja
        boolean intercambiado = true;
        int j = 0;
        int temp;
    
        while (intercambiado) {
            intercambiado = false;
            j++;
            for (int i = 0; i < iList.length - j; i++) {
                if (iList[i] > iList[i + 1]) {
                    temp = iList[i];
                    iList[i] = iList[i + 1];
                    iList[i + 1] = temp;
                    intercambiado = true;
                }
            }
        }
    
        // Imprimir el array ordenado      
        System.out.println("Array ordenado:");
        System.out.println(Arrays.toString(iList));
    }
    

    Con este código actualizado, el ordenamiento de burbuja se repetirá hasta que no se realicen intercambios durante un pase, lo que hace que el ordenamiento sea más eficiente. La salida mostrará el progreso en el proceso de ordenamiento y el array ordenado final.

Comments are closed.