Académique Documents
Professionnel Documents
Culture Documents
Integrantes:
Carlos Bustos G.
Angelo Etcheverry M.
15 de junio de 2010
.- Introducción
Subvector no Ordenado
Donde:
Ejemplo:
52 9 3 87 21
0 1 2 3 4
3 9 52 87 21
x, min
3 9 52 87 21
x min
3 9 21 87 52
x min
3 9 21 52 87
pos_min = i;
aux = vector[i];
vector[i] = vector[pos_min];
vector[pos_min] = aux;
}
}
Algoritmo:
El primer bucle for es el que realiza las iteraciones, indica el inicio del subvector
ordenado y se encarga de llevar el elemento de menor valor a la primera posición
del subvector no ordenado.
Complejidad:
Conclusión:
15 93 45 8 32 56
15 93 45 8
1.- Iteración: comparamos 93 con el anterior. ¿93 < 15? No, como están en orden
pasamos a la siguiente iteración.
15 93 45 8
15 45 93 8
¿45 < 15? No, como están en orden pasamos a la siguiente iteración.
15 45 93 8
3.- Iteración: Comparemos el 8 con su anterior (93). ¿8 < 93? Si, entonces
intercambiamos.
15 45 8 93
15 8 45 93
8 15 45 93
8 15 45 93
Public void Ordenar_Insercion(){
int aux;
aux = vector[i];
vector[j] = vector[j-1];
vector[j-1] = aux;
}
}
}
Algoritmo:
Observamos que el bucle for principal recorre todos los elementos del vector
desde i = 1 (segundo elemento) hasta el n-ésimo. Mientras que el bucle for
secundario compara el elemento con su anterior y en caso de ser menor lo inserta
en su respectivo lugar entre sus predecesores (Subvector Ordenado).
Complejidad:
Conclusión:
Subvector no Ordenado
Ejemplo:
20 8 10 3
1.- Iteración:
¿3 < 20? Si, intercambiamos y pasamos a la siguiente iteración. (10) es el nuevo ‘ultimo’
3 20 8 10
2.- Iteración:
¿10 < 8? No intercambiamos.
3 20 8 10
3 8 20 10
3.- iteración:
¿10 < 20? Si, entonces intercambiamos. Como no quedan elementos menores a 10
(dentro del subvector no ordenado) pasamos a la siguiente iteración.
3 8 10 20
3 8 10 20
Public void ordenar_Burbuja(){
int aux;
for(int i = 1; i < vector.length;i++){
for(int j= vector.length-1;j>=i;j--){
if(vector[j] < vector[j-1]){
aux = vector[j];
vector[j] = vector[j-1];
vector[j-1] = aux;
}
}
}
}
Algoritmo:
Este método recorre el vector de derecha a izquierda, esto quiere decir, desde el
índice (vector.length -1) hasta 0.
Complejidad:
Conclusión:
3 8 5 2 6 Ejemplo:
¿3 es menor o mayor que pivote (5)? es menor, entonces lo deja al lado izquierdo.
Luego: ¿8 es mayor o menor que pivote (5)? es mayor, entonces lo tira a su derecha. No
quedan más elementos.
3 8 5 2 6
3 2 5 8 6
Notamos que los subvectores tanto a la izquierda como derecha aun no están ordenados.
Así buscamos un nuevo pivote para cada subvector.
Pivote izquierdo: vector [(0 + 1)/2] = vector [1/2] = vector [0.5] = vector [0] = 3
Pivote derecho: vector [(3 + 4)/ 2] = vector [7/2] = vector [3.5] = vector [3] = 8
Para subvector izquierdo: ¿2 es mayor o menor que su pivote (3)? es menor, entonces lo
mueve a su izquierda.
Para subvector derecho: ¿6 es mayor o menor que su pivote (8)? es menor, entonces lo
tira a su izquierda.
3 2 5 8 6
2 3 5 6 8
public void ordenar_Quicksort(int[] vector, int izq, int der) {
int i = izq;
int j = der;
int pivote = vector[ (izq + der) / 2];
do {
while (vector[i] < pivote) {
i++;
}
while (vector[j] > pivote) {
j--;
}
if (i <= j) {
int aux = vector[i];
vector[i] = vector[j];
vector[j] = aux;
i++;
j--;
}
}
while (i <= j);
if (izq < j) {
ordenar_Quicksort(vector, izq, j);
}
if (i < der) {
ordenar_Quicksort(vector, i, der);
}
}
Algoritmo:
Una vez dividido, lo que hace es dejar todos los menores que el pivote a su
izquierda y a su vez todos los mayores a su derecha.
Complejidad:
Conclusión:
Las llamadas recursivas hacen que este método sea mucho más eficiente en
comparación con los métodos iterativos antes analizados y lejos el método más
rápido de ordenamiento.
.- Conclusión