Está en la página 1de 11

Método de la Burbuja (Bubble Sort)

Ver la siguiente imagen animada:


bubble-sort-example-300px.gif

Código en java:
public static void bubbleSort(int[] a){
int temp;
for (int i=0; i<a.length-1; i++)
for (int j=0; j<a.length-1-i; j++)
if ( a[j] > a[j+1] ) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}

1- Se pide un programa que pida un número (n) de elementos para guardar en un array,
el cual se llenará introduciendo números por teclado (usando la clase Scanner). El
programa deberá ordenar los números mediante el algoritmo de ordenación de
burbuja y los mostrará antes y después de la ordenación.
El resultado de la corrida dado el caso de estudio siguiente:
Debe dar como resultado:

2- Suponga que usted tiene que ordenar la siguiente lista de números:


[19, 1, 9, 7, 3, 10, 13, 15, 8, 12]. ¿Cuál de las siguientes listas
representa la lista parcialmente ordenada tras tres pasadas
completas del ordenamiento burbuja?
Solución:
a [19, 1, 9, 7, 3, 10, 13, 15, 8, 12] public static void
Iteración 1: i=0; i<9; i++ bubbleSort(int[] a){
Iteración 1: j=0; j<9 ; j++ int temp;
if(a[0]=19> 1=a[1]) for (int i=0; i<a.length-1;
temp= 19 i++)
a[0] = 1 for (int j=0;
a[1] = 19 j<a.length-1-i; j++)
a [1, 19, 9, 7, 3, 10, 13, 15, 8, if ( a[j] > a[j+1]
12] )
Iteración 2: j=1; j<9 ; j++ {
if(a[1]=19> 9=a[2]) temp = a[j];
temp= 19 a[j] =
a[1] = 9 a[j+1];
a[2] = 19 a[j+1] =
a [1, 9, 19, 7, 3, 10, 13, 15, 8, temp;
12] }
Iteración 3: j=2; j<9; j++ }
if(a[2]=19> 7=a[3])
temp= 19
a[2] = 7
a[3] = 19
a [1, 9, 7, 19, 3, 10, 13, 15, 8,
12]
Iteración 4: j=3; j<9; j++
if(a[3]=19> 3=a[4])
temp= 19
a[3] = 3
a[4] = 19
a [1, 9, 7, 3, 19, 10, 13, 15, 8,
12]
Iteración 5: j=4; j<9; j++
if(a[4]=19> 13=a[5])
temp= 19
a[4] = 13
a[5] = 19
a [1, 9, 7, 3, 10, 19, 13, 15, 8,
12]
Iteración 6: j=5; j<9; j++
if(a[5]=19> 13=a[6])
temp= 19
a[5] = 13
a[6] = 19
a [1, 9, 7, 3, 10, 13, 19, 15, 8,
12]
Iteración 7: j=6; j<9; j++
if(a[6]=19> 15=a[7])
temp= 19
a[6] = 15
a[7] = 19
a [1, 9, 7, 3, 10, 13, 15, 19, 8,
12]
Iteración 8: j=7; j<9; j++
if(a[7]=19> 8=a[8])
temp= 19
a[7] = 8
a[8] = 19
a [1, 9, 7, 3, 10, 13, 15, 8, 19,
12]
Iteración 9: j=8; j<9; j++
if(a[8]=19> 12=a[9])
temp= 19
a[8] = 12
a[9] = 19
a [1, 9, 7, 3, 10, 13, 15, 8, 12,
19]

Iteración 2: i=1; i<9; i++


Iteración 1: j=1; j<8; j++
if(a[1]=9> 7=a[2])
temp= 9
a[1] = 7
a[2] = 9
a [1, 7, 9, 3, 10, 13, 15, 8, 12,
19]
Iteración 2: j=2; j<8; j++
if(a[2]=9> 3=a[3])
temp= 9
a[2] = 3
a[3] = 9
a [1, 7, 3, 9, 10, 13, 15, 8, 12,
19]
Iteración 3: j=3; j<8; j++
if(a[3]=9> 10=a[4])—NO
a [1, 7, 3, 9, 10, 13, 15, 8, 12,
19]
Iteración 4: j=4; j<8; j+
if(a[4]=10> 13=a[5]) --NO
a [1, 7, 3, 9, 10, 13, 15, 8, 12,
19]
Iteración 5: j=5; j<8; j++
if(a[5]=13> 15=a[6]) --NO
a [1, 7, 3, 9, 10, 13, 15, 8, 12,
19]
Iteración 6: j=6; j<8; j++
if(a[6]=15> 8=a[7])
temp= 15
a[6] = 8
a[7] = 15
a [1, 7, 3, 9, 10, 13, 8, 15, 12,
19]
Iteración 7: j=7; j<8; j++
if(a[7]=15> 12=a[8])
temp= 15
a[7] = 12
a[8] = 15
a [1, 7, 3, 9, 10, 13, 8, 12, 15,
19]

Iteración 3: i=2; i<9; i++


Iteración 1: j=2; j<7 ; j++
if(a[2]=3> 9=a[3])--NO
a [1, 7, 3, 9, 10, 13, 8, 12, 15,
19]
Iteración 2: j=3; j<7; j++
if(a[3]=9> 10=a[4]) --NO
a [1, 7, 3, 9, 10, 13, 8, 12, 15,
19]
Iteración 3: j=4; j<7; j++
if(a[4]=10> 13=a[5]) --NO
a [1, 7, 3, 9, 10, 13, 8, 12, 15,
19]
Iteración 4: j=5; j<7; j++
if(a[5]=13> 8=a[6])
temp= 13
a[5] = 8
a[6] = 13
a [1, 7, 3, 9, 10, 8, 13, 12, 15,
19]
Iteración 5: j=6; j<7; j++
if(a[6]=13> 12=a[7])
temp= 13
a[6] = 12
a[7] = 13
a [1, 7, 3, 9, 10, 8, 12, 13, 15,
19]

Método de Selección Directa


Este método consiste en dividir el arreglo en dos porciones: una ordenada y la otra no. Se
comienza con la porción ordenada vacía y el arreglo completo en la porción desordenada;
aquí se busca el menor elemento y se intercambia con el primero. Luego se busca el menor
de los que restan y se intercambia con el segundo y así sucesivamente hasta terminar con
todos.
Veamos los ejemplos:
El paso inicial es seleccionar el valor menor del arreglo e intercambiarlo con el primer
elemento:
Y, así sucesivamente:

3- Suponga que usted tiene que ordenar la siguiente lista de números:


[11, 7, 12, 14, 19, 1, 6, 18, 8, 20] ¿Cuál de las siguientes listas
representa la lista parcialmente ordenada tras tres pasadas
completas del ordenamiento por selección?
A. [7, 11, 12, 1, 6, 14, 8, 18, 19, 20]
B. [7, 11, 12, 14, 19, 1, 6, 18, 8, 20]
C. [11, 7, 12, 14, 1, 6, 8, 18, 19, 20]
D. [11, 7, 12, 14, 8, 1, 6, 18, 19, 20]

Solución:
a [11, 7, 12, 14, 19, 1, 6, 18, 8, 20] public static void
Iteración 1: i=0; i<8; i++ selectSort(int[] a) {
min=0 int temp;
Iteración 1: j=1; j<9 ; j++ for (int i = 0; i < a.length
if(a[1]=7 < 11=a[0]) - 1; i++) {
min= a[1]=7 int min = i;
Iteración 2: j=2; j<9 ; j++ for (int j = i + 1; j <
if(a[2]=12 < 11=a[0])--NO a.length; j++) {
Iteración 3: j=3; j<9 ; j++ if (a[j] < a[min]) {
if(a[3]=14 < 11=a[0])—NO min = j;
Iteración 4: j=4; j<9 ; j++ }
if(a[4]=19 < 11=a[0])—NO }
Iteración 5: j=5; j<9 ; j++ temp = a[i];
if(a[5]=1 < 11=a[0]) a[i] = a[min];
min= 1a[5] a[min] = temp;
Iteración 6: j=6; j<9 ; j++ }
if(a[6]=6 < 11=a[0]) }
min= 6 a[6]
Iteración 7: j=7; j<9 ; j++
if(a[7]=18 < 11=a[0])--NO
Iteración 8: j=8; j<9 ; j++
if(a[8]=8 < 11=a[0])
min= 8
temp = 11a[0]
a[0] = 11
a[0]=11
a [11, 19, 9, 7, 3, 10, 13, 15, 8,
12]
Iteración 1: i=1; i<8; i++
min=1
Iteración 1: j=2; j<9 ; j++
if(a[2]=9 < 19=a[1])
min= a[2]=9
Iteración 2: j=3; j<9 ; j++
if(a[3]=7 < 19=a[1])
min= a[3]=9
Iteración 3: j=4; j<9 ; j++
if(a[4]=7 < 19=a[1])
min= a[4]=7
Iteración 4: j=5; j<9 ; j++
if(a[5]=10 < 19=a[1])
min= a[5]=10
Iteración 5: j=6; j<9 ; j++
if(a[6]=13 < 19=a[1])
min= a[6]=13
Iteración 6: j=7; j<9 ; j++
if(a[7]=15 < 19=a[1])
min= a[7]=15
Iteración 7: j=8; j<9 ; j++
if(a[8]=8 < 19=a[1])
min= a[8]=8
temp = 19a[1]
a[1] = 8
a[8]=19
a [11, 19, 9, 7, 3, 10, 13, 15, 8, 12]
Iteración 3: i=2; i<8; i++
min=2
Iteración 1: j=3; j<9 ; j++
if(a[3]=7 < 19=a[1])
min= a[3]=7
Iteración 2: j=4; j<9 ; j++
if(a[4]=3 < 19=a[1])
min= a[4]=3
Iteración 3: j=5; j<9 ; j++
if(a[5]=10 < 19=a[1])
min= a[5]=10
Iteración 4: j=6; j<9 ; j++
if(a[6]=13 < 19=a[1])
min= a[6]=13
Iteración 5: j=7; j<9 ; j++
if(a[7]=15 < 19=a[1])
min= a[7]=15
Iteración 6: j=8; j<9 ; j++
if(a[8]=8 < 19=a[1])
min= a[8]=8
temp = 9a[2]
a[1] = 9
a[2]=9
a[11, 7, 12, 14, 8, 1, 6, 18, 19, 20]

Método de Inserción Directa


Nuestro subarreglo ordenado posee ahora cuatro elementos. Repetimos el proceso, copiando
el elemento siguiente al subarreglo ordenado para la variable auxiliar y comparando dicha
variable auxiliar con los elementos del subarreglo ordenado. En caso de que sea necesario,
se copian para la derecha los elementos que fueran mayores que la variable auxiliar hasta
que se encuentre un elemento menor o hasta que se llegue al inicio del arreglo:

4- Suponga que usted tiene que ordenar la siguiente lista de números:


[15, 5, 4, 18, 12, 19, 14, 10, 8, 20] ¿Cuál de las siguientes listas
representa la lista parcialmente ordenada tras tres pasadas
completas del ordenamiento por inserción? Justifique mostrando la
ordenación gráficamente.
A. [4, 5, 12, 15, 14, 10, 8, 18, 19, 20]
B. [15, 5, 4, 10, 12, 8, 14, 18, 19, 20]
C. [4, 5, 15, 18, 12, 19, 14, 10, 8, 20]
D. [15, 5, 4, 18, 12, 19, 14, 8, 10, 20]

Solución:
a [15, 5, 4, 18, 12, 19, 14, 10, 8, 20] public static void insertSort(int[] a) {
int temp;
Iteración 1: i=1; i<9; i++ for (int i = 1; i < a.length; i++) {
temp = a[i];
temp=a[i]= 5 int j = i - 1;
j=0 while (j >= 0 && temp < a[j]) {
a[j + 1] = a[j];
Iteracion1: While( j >= 0 && 5< 15 { j--;
a[1] =15 }
a[j + 1] = temp;
j- - }
} }
}
a[0] = 5
a [5, 15, 12, 14, 19, 1, 6, 18, 8,
20]
Iteración 2: i=2; i<9; i++
temp=a[i]= 12
j=1
Iteracion1: While( j >= 1 && 12< 15 {
a[2] =15
j- -
Iteracion1: While( j >= 0 && 12< 15 {
a[1] =12
j- -
}
a[1] = 12
a [5, 12, 15, 14, 19, 1, 6, 18, 8,
20]
Iteración 3: i=3; i<9; i++
temp=a[i]= 14
j=2
Iteracion1: While( j >= 0 && 14< 12 {
a[3]=14
a [4, 5, 15, 18, 12, 19, 14, 10,
8, 20]

También podría gustarte