Está en la página 1de 19

Ordenamiento

Ordenar es
 clasificar de acuerdo a algún criterio,
los elementos de un conjunto:
ascendente.
descendente.
 una necesidad en múltiples casos...
¡imagine lo que seria buscar un número en una guía
telefónica no ordenada!.
 conveniente cuando se requiere hacer una cantidad
considerable de búsquedas y es importante el factor
tiempo.
 conveniente cuando se requiere hacer una búsqueda
en una lista con una cantidad considerable de
elementos.
Tipos de Ordenamiento
Interno
cuando los valores a ordenar están en
Memoria Principal.
Ejemplo: Arreglos.

Externo
cuando los valores a ordenar están en
memoria secundaria (Memoria Auxiliar).
Ejemplo: Archivo de Datos.
Algoritmos de Ordenamiento

Por selección
Burbuja o intercambio
Inserción
Quicksort
Shell
Otros (Merge, Radix, Heap, Shake)…
Continuación 
Ordenamiento por Selección
6 22 -3 15 34 100 8 Se debe obtener el mayor o el
menor elemento de un grupo y
colocarlo en la posición que le
-3 22 6 15 34 100 8
corresponde. EJ. Ascendente.
para i = 1 hasta n – 1 hacer
-3 6 22 15 34 100 8
pos_men = Menor( lista, n, i );
temp = lista[ i ];
-3 6 8 15 34 100 22 lista[ i ] = lista [pos_men];
lista [pos_men] = temp;
-3 6 8 15 34 100 22 fin para

Menor(lista, n, i) es una función


-3 6 8 15 22 100 34
que retorna la posición del
menor elemento de la lista
-3 6 8 15 22 34 100 entre las posiciones i y n
Ordenamiento por Selección
Ventajas: Desventajas:
Fácil implementación.  Lento.
No requiere memoria  Numerosas
adicional. comparaciones.
Realiza pocos
intercambios.
Rendimiento constante:
poca diferencia entre el
peor y el mejor caso.

Por realizar un intercambio en cada ejecución, puede ser


una buena opción para listas con muchos elementos.
Ordenamiento Burbuja
Se comparan elementos
adyacentes de modo de
obtener ordenes relativos
25 25 25 15 15 1 entre ellos.
Ej. Ascendente.
32 15 15 25 1 15
para i = 1 hasta n – 1 hacer
15 32 1 1 25 25 para j = 1 hasta n – i hacer
si (lista[ j ] > lista[ j + 1])
1 1 32 32 32 32 entonces
temp = lista[ j ];
lista[ j ] = lista[ j + 1];
lista[ j + 1] = temp;
fin si
Ordenamiento Burbuja
Ventajas: Desventajas:
Fácil  Muy lento.
implementación.  Realiza numerosas
No requiere comparaciones.
memoria adicional.  Realiza numerosos
intercambios.

Este algoritmo es uno de los más pobres en rendimiento.


No es recomendable usarlo.
Ordenamiento por Inserción
Se toma cada elemento del arreglo
7 temp y se compara con los que se
encuentran en posiciones anteriores
7
5 7
5 4 21 12 a la de él hasta colocarlo en su
j i 4
posición correcta.
temp
EJ. Descendente.
7 5 4 21 12 para i = 2 hasta TAM hacer
temp = lista[i];
j i
21 j = i - 1;
temp
mientras (lista[ j ] < temp) y ( j >= 1)
hacer
21
7 5
7 5
4 4 12 temp
21
lista[ j + 1] = lista[ j ];
j j j i 12 j = j - 1;
21 12
7 5
7 5
4 12
4 fin mientras
lista[ j + 1] = temp;
j j j j i
fin para
Ordenamiento por Inserción

Ventajas: Desventajas:
Fácil implementación.  Lento.
Requerimientos  Realiza numerosas
mínimos de memoria. comparaciones.

Puede ser de utilidad para listas que están ordenadas o


semiordenadas, porque en ese caso realiza muy pocos
desplazamientos.
Ordenamiento Quicksort
Es un algoritmo recursivo que trata de subdividir el
arreglo original en menores arreglos de manera que
se ordene porciones pequeñas.

Ventajas: Desventajas:
Muy rápido  Implementación un
No requiere memoria poco más complicada.
adicional.  Recursividad (utiliza
muchos recursos).
 Mucha diferencia entre
el peor y el mejor caso.
Es muy eficiente. En general es la mejor opción.
Ordenamiento Shell
Se comparan elementos de dos posiciones del arreglo y se
intercambian si es necesario, las posiciones se eligen inicialmente
como el primero y el que ocupa la posición más cercana al
centro del arreglo, luego se divide el rango y se comparan tres
elementos del arreglo, y así sucesivamente hasta que se
comparan elementos adyacentes para comprobar el orden.

25 57 48 37 12 92 86 33 25 12 33 37 48 92 86 57

25 57 33 37 12 92 86 48 12 25 33 37 48 57 86 92
¿Cuál debo Utilizar?

¿El más eficiente?

¿El que tiene menos intercambios?

¿El que compara menos?

¿El más rápido en ejecución?

¿El más fácil de implementar?


Ordenamiento

Arreglos
Bidimensionales
Ordenamiento en Matrices

 Fila/Columna Independiente

 Fila/Columna Dependiente

 Todos los Elementos


Fila / Columna Independiente

Matriz Original Matriz Resultante


Para i = 1 hasta c-1 hacer
Para j = i + 1 hasta c hacer
si M[k,i] > M[k,j] entonces
temp = M[k,i];
M[k,i] = M[k,j];
M[k,j] = temp;
fin si
Fila / Columna Dependiente
Matriz Original Matriz Resultante

para i = 1 hasta c - 1 hacer


para j = i +1 hasta c hacer
si M[k,i] > M[k,j] entonces
para s = 1 hasta f hacer
temp = M[s,i];
M[s,i] = M[s,j];
M[s,j] = temp;
fin para
Todos los Elementos

Matriz Original Matriz Resultante


Ordenamiento

Ejercicios

También podría gustarte