You are on page 1of 21

Universidad Nacional del Centro del Per

Facultad de Ingeniera de sistemas


Estructura de Datos
Mg. Jos Luis Cerrn Prez
Ordenamiento y Bsqueda

Mg. Jos Luis Cerrn Prez
Objetivos
Con el estudio de este captulo usted podr:
Conocer los algoritmos basados en el intercambio
de elementos.
Conocer el algoritmo de ordenacin por insercin.
Conocer el algoritmo de burbuja.
Conocer el algoritmo de Shell.
Aplicar mtodos mas eficientes de ordenacin de
arrays.
Diferenciar entre bsqueda secuencial y
bsqueda binaria.
ORDENACIN
La ordenacin o clasificacin de datos (sort, en ingls)
es una operacin consistente en disponer un conjunto de
datos en algn determinado orden con respecto a uno de
los campos de los elementos del conjunto.
Una lista est ordenada por la clave k si la lista est en
orden ascendente o descendente con respecto a esa
clave.
La lista est en orden ascendente si:
i < j implica que k[i] <= k[j]
y est en orden descendente si:
i > j implica que k[i] <= k[j]
ORDENACIN
Los mtodos de ordenacin se suelen dividir en dos
grandes grupos:
Directos: burbuja, seleccin, insercin
Indirectos (avanzados) shell, ordenacin rpida, ordenacin por
mezcla, radixsort

ALGORITMOS DE ORDENACIN
BSICOS
Los algoritmos bsicos de ordenacin ms simples y
clsicos son:
Ordenacin por seleccin.
Ordenacin por insercin.
Ordenacin por burbuja.
ORDENACIN POR INTERCAMBIO
El algoritmo de ordenacin tal vez ms sencillo sea el
denominado de intercambio, que ordena los elementos
de una lista en orden ascendente.
El algoritmo se basa en la lectura sucesiva de la lista a
ordenar, comparando el elemento inferior de la lista con
los restantes y efectuando un intercambio de posiciones
cuando el orden resultante de la comparacin no sea el
correcto.
ORDENACIN POR INTERCAMBIO
Pasada 1
ORDENACIN POR INTERCAMBIO
Pasada 2




Pasada 3

ORDENACIN POR INTERCAMBIO
El intercambio (swap) de los elementos a[i],a[j] se realiza
en el mtodo intercambiar():
public static void intercambiar(int []a, int i, int j)
{
int aux = a[i];
a[i] = a[j];
a[j]= aux ;
}

ORDENACIN POR INTERCAMBIO
public static void ordIntercambio (int a[])
{
int i, j;
for (i = 0 ; i < a.length-1; i++){
for (j = i+1 ; j < a.length; j++){
if (a[i] > a[j])
{
intercambiar(a, i, j);
}
}
}
}
ORDENACIN POR SELECCIN
El algoritmo se apoya en las pasadas que intercambian el elemento
ms pequeo, sucesivamente con el elemento de la lista, a[], que
ocupa la posicin igual al orden de pasada (hay que considerar el
ndice 0).
La pasada inicial busca el elemento ms pequeo de la lista y se
intercambia con a[0], primer elemento de la lista.
Despus de terminar esta primera pasada, el frente de la lista est
ordenado y el resto de la lista a[1], a[2]...a[n-1] permanece
desordenado.
La siguiente pasada busca en esta lista desordenada y selecciona el
elemento ms pequeo, que se almacena entonces en la posicin
a[1], y as sucesivamente hasta el ultimo elemento.
ORDENACIN POR SELECCIN
ORDENACIN POR SELECCIN
public static void ordSeleccion (double a[])
{
int indiceMenor, i, j, n;
n = a.length;
for (i = 0; i < n-1; i++)
{
// comienzo de la exploracin en ndice i
indiceMenor = i;
// j explora la sublista a[i+1]..a[n-1]
for (j = i+1; j < n; j++){
if (a[ j ] < a[indiceMenor]){
indiceMenor = j;
}
}
// sita el elemento mas pequeo en a[i]
if (i != indiceMenor){
intercambiar(a, i, indiceMenor);
}
}
}
ORDENACIN POR INSERCIN
El mtodo de ordenacin por insercin es similar al proceso tpico de
ordenar tarjetas de nombres (cartas de una baraja) por orden
alfabtico consistente en insertar un nombre en su posicin correcta
dentro de una lista que ya est ordenada.
El proceso en el caso de la lista de enteros es:
ORDENACIN POR INSERCIN
El mtodo de ordenacin por insercin es similar al proceso tpico de
ordenar tarjetas de nombres (cartas de una baraja) por orden
alfabtico consistente en insertar un nombre en su posicin correcta
dentro de una lista que ya est ordenada.
El proceso en el caso de la lista de enteros es:
ORDENACIN POR INSERCIN
El algoritmo correspondiente a la ordenacin por insercin contempla
los siguientes pasos:
1. El primer elemento a[0] se considera ordenado; es decir, la lista inicial consta de un
elemento.
2. Se inserta a[1] en la posicin correcta; delante o detrs de a[0], dependiendo de si
es menor o may
3. Por cada bucle o iteracin i (desde i=1 hasta n-1) se explora la sublista a[i-1] ... a[0]
buscando la posicin correcta de insercin de a[i]; a la vez, se mueven hacia abajo
(a la derecha en la sublista) una posicin todos los elementos mayores que el
elemento a insertar a[i], para dejar vaca esa posicin.
4. Insertar el elemento a[i] a la posicin correcta.
ORDENACIN POR INSERCIN
public static void ordInsercion (int [] a)
{
int i, j;
int aux;
for (i = 1; i < a.length; i++)
{
/* indice j es para explorar la sublista a[i-1]..a[0] buscando la posicion correcta del elemento destino*/
j = i;
aux = a[i];
// se localiza el punto de insercin explorando hacia abajo
while (j > 0 && aux < a[j-1])
{
// desplazar elementos hacia arriba para hacer espacio
a[j] = a[j-1];
j--;
}
a[j] = aux;
}
}
ORDENACIN POR INSERCIN
public static void ordInsercion (int [] a)
{
int i, j;
int aux;
for (i = 1; i < a.length; i++)
{
/* indice j es para explorar la sublista a[i-1]..a[0] buscando la posicion correcta del elemento destino*/
j = i;
aux = a[i];
// se localiza el punto de insercin explorando hacia abajo
while (j > 0 && aux < a[j-1])
{
// desplazar elementos hacia arriba para hacer espacio
a[j] = a[j-1];
j--;
}
a[j] = aux;
}
}
Resumen
Una de las aplicaciones ms frecuentes, en
programacin es la ordenacin.
Existen dos tcnicas de ordenacin fundamentales en
gestin de datos: ordenacin de listas y ordenacin de
archivos.
Los datos se pueden ordenar en orden ascendente o en
orden descendente.
Cada recorrido de los datos durante el proceso de
ordenacin se conoce como pasada o iteracin.
Bibliografa

You might also like