Você está na página 1de 18

Algoritmos básicos de

ordenación y búsqueda
ASPIRANTE: EDGAR RODRIGO LOPEZ SILVA
¿En que consiste la ordenación?
En computación y matemáticas un algoritmo de ordenación es un algoritmo que reacomoda los
elementos de una lista o un vector en una secuencia dada por una relación de orden.

𝑬𝒏𝒕𝒓𝒂𝒅𝒂: 𝑠𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 < 𝑎0 , 𝑎2 , … , 𝑎𝑛−1 > 𝑑𝑒 𝑛ú𝑚𝑒𝑟𝑜𝑠.

𝑺𝒂𝒍𝒊𝒅𝒂: 𝑝𝑒𝑟𝑚𝑢𝑡𝑎𝑐𝑖ó𝑛 < 𝑎′0 , 𝑎′2 , … , 𝑎′ 𝑛−1 > 𝑡𝑎𝑙 𝑞𝑢𝑒 𝑎′ 0 ≤ 𝑎′ 2 ≤ ⋯ ≤ 𝑎′ 𝑛−1 .
Algoritmos básicos de ordenación
Ordenación por intercambio

Ordenación por selección


Tipos de
algoritmos
Ordenación por inserción

Ordenación por burbuja


Ordenamiento por intercambio
Algoritmo:
▪Usando un bucle tipo for, inicializar el índice i en 0 para apuntar al
primer elemento del arreglo. Este índice apunta al elemento que
este siendo comparado en una determinada iteración con los
elementos posteriores.
▪Usando un bucle tipo for anidado, inicializar el índice j en una
posición adelante del índice i. Este índice permite apuntar a los
elementos posteriores.
▪Si a[i] > a[j], entonces proceder con el intercambio de los elementos.
▪Incrementar el índice j hasta el final del arreglo. Hasta entonces,
incrementar el índice i para repetir el proceso.
Ordenamiento por selección
Algoritmo:
▪Seleccionar el elemento más pequeño de la lista A. Intercambiarlo
con el primer elemento A[0]. Ahora la entrada más pequeña está en
la primera posición del vector.
▪Considerar las posiciones de la lista A[1], A[2], A[3]..., seleccionar el
elemento más pequeño e intercambiarlo con A[1]. Ahora las dos
primeras entradas de A están en orden.
▪Continuar este proceso encontrando o seleccionando el elemento
más pequeño de los restantes elementos de la lista,
intercambiándolos adecuadamente.

Al terminar la iteración i, se sitúa el


elemento mas pequeño de la sublista en
A[i].
Análisis asintótico
Se requiere un número fijo de comparaciones que solo depende del tamaño del arreglo:

En la primera pasada se hacen n-1 comparaciones, en la segunda pasada n-2 y así sucesivamente.

La complejidad del algoritmo se mide por el número de comparaciones y es cuadrática, es decir 0(n2).
Ordenamiento por inserción
Algoritmo:
▪El primer elemento A[0] se considera ordenado; es decir, la lista
inicial consta de un elemento.
▪Se inserta A[1] en la posición correcta; delante o detrás de A[0],
dependiendo de que sea menor o mayor. Es decir, se explora la lista
desde A[i] hasta A[n] buscando la posición correcta de destino; esto
es, la posición a insertar dentro de la lista ordenada.
▪Por cada bucle o iteración se mueve hacia abajo (a la derecha en la
lista) una posición todos los elementos mayores que la posición a
insertar, para dejar vacía esa posición.
▪Insertar el elemento a la posición correcta.
Análisis asintótico
La ordenación por inserción requiere un numero fijo de iteraciones.
Caso promedio: Para una iteración general i, la inserción ocurre en la sublista A[0] a A[i] y requiere la media de
i/2 comparaciones. Por ende, la complejidad del algoritmo es 𝑂(𝑛2 ).

Mejor caso: sucede cuando la lista original está ya ordenada; en la pasada i, la inserción ocurre en A[i] y el
número total de comparaciones es 1 con complejidad 𝑂 𝑛 .
Peor caso: Se produce cuando la lista está ordenada en orden descendente (inverso) y el número total de
comparaciones esta descrito por la formula que se muestra a continuación. La complejidad es 𝑂(𝑛2 ).

* Por convención del autor, se utiliza la notación O para los tres casos. Otros autores usan la notación correspondiente para cada caso.
Ordenamiento por burbuja
Algoritmo:
▪En la iteración 0 se comparan elementos adyacentes. (A[0], A[1]),
(A[1], A[2]), (A[2], A[3]),..., (A[n-2], A[n-1]). Se realizan n-1
comparaciones. Por cada pareja (A[i] , A[i+1]) se intercambian los
valores si A[i+1] < A[i]. Al final de la pasada, el elemento mayor de la
lista está situado en A[n-1].
▪En la iteración 1 se realizan las mismas comparaciones e
intercambios, terminando con el elemento de segundo mayor valor
en A[n-2].
▪El proceso termina con la iteración n-1, en la que el elemento más
pequeño se almacena en A[0].
Análisis asintótico
Dependerá de la versión utilizada:
▪La versión más simple se hacen n-1 pasadas y n-1 comparaciones en cada pasada. Por
consiguiente, el número de comparaciones es (n-1)(n-1) = n2 – 2n + 1, es decir, la complejidad es
0(n2).
▪Para las versiones mejoradas:
En el mejor de los casos, la ordenación por burbuja hace una sola iteración en el caso de una lista que ya está ordenada
en orden ascendente y, por tanto, su complejidad es 0(n).

En el peor de los casos se requieren (n-i-1) comparaciones y (n-i-1) intercambios. La ordenación completa requiere [n(n-
1)/2] comparaciones y un número similar de intercambios. La complejidad para el peor de los casos es 0(n2)
comparaciones y 0(n2) intercambios.
Comparativa
Algoritmo Complejidad (peor caso) Comentarios
Ordenación por selección 𝑂(𝑁 2 ) Mejor eficiencia respecto de la ordenación por burbuja. El
número de intercambios es menor que para el algoritmo de
inserción. Se prefiere el ordenamiento por selección cuando
se trabaja con arreglos.
Ordenación por inserción 𝑂(𝑁 2 ) Puede realizar menos comparaciones que el de selección,
dependiendo de que tan ordenado se encuentra el arreglo
originalmente. Se prefiere el ordenamiento por inserción
cuando se trabaja con listas enlazadas.
Ordenación por burbuja 𝑂(𝑁 2 ) Fácil de comprender. Se caracteriza por ser el menos eficiente
para un tamaño de entrada grande. No suele utilizarse.
¿En que consiste la búsqueda?
Consiste en encontrar un elemento especifico de un arreglo. Su relevancia se debe a que con
mucha frecuencia los ingenieros de software trabajan con grandes cantidades de datos
almacenados en registros y arreglos, y por ello será necesario determinar si un arreglo contiene
un valor que coincida con un cierto valor clave.
Algoritmos básicos de búsqueda

Búsqueda secuencial o lineal


Tipos de
algoritmos
Búsqueda binaria
Búsqueda secuencial o lineal
Algoritmo:
▪El algoritmo comienza en el primer elemento lista[0] o bien en una posición
predeterminada (inicio) y recorre los restantes elementos de las listas,
comparando cada elemento con la clave deseada.
▪La exploración continúa hasta que se encuentra la clave o se termina la lista. Si la
clave se encuentra, se devuelve el índice del elemento encontrado en la lista; en
caso contrario, se devuelve el valor –1.
Análisis asintótico:
▪Mejor caso: El mejor caso se encuentra cuando aparece una coincidencia en el
primer elemento de la lista y en ese caso el tiempo de ejecución es O(1).
▪Peor caso: Se produce cuando el elemento no está en la lista o se encuentra al
final de la lista. Esto requiere buscar en todos los n términos, lo que implica una
complejidad de O(n).
▪Caso promedio: En caso de una lista aleatoria, es probable que una coincidencia
ocurra en cualquier posición. Después de la ejecución de un número grande de
búsquedas, la posición media para una coincidencia es el elemento central n/2. El
elemento central ocurre después de n/2 comparaciones, que define el coste
esperado de la búsqueda. Por esta razón, se dice que la prestación media de la
búsqueda secuencial es O(n).
Búsqueda binaria
Algoritmo:
1.- Calcular el índice del punto central del arreglo IMPORTANTE: El elemento se busca en
▪ central = (bajo + alto)/2 una lista previamente ordenada.

2.- Comparar el valor de este elemento central con la clave


▪ Si a[central] < clave, la nueva sublista de búsqueda tiene por valores
extremos de su rango bajo = central+1 ..alto.
▪ Si clave < a[central], la nueva sublista de búsqueda tiene por valores
extremos de su rango bajo..central-1 = alto.

El algoritmo se termina ya sea porque se ha encontrado la clave o


porque el valor de bajo excede a alto y el algoritmo devuelve el
indicador de fallo de –1 (elemento no encontrado).
Análisis asintótico
Mejor caso: Se presenta cuando una coincidencia se encuentra en el punto central de la lista. En este caso la
complejidad es O(1) dado que sólo se realiza una prueba de comparación de igualdad.
Peor caso: La complejidad del caso peor es O(log2n), que se produce cuando el elemento no está en la lista o el
elemento se encuentra en la última comparación
Caso promedio: El análisis es similar al del peor caso, por lo que resulta ser O(log2n).
Comparativa
En esta tabla se aprecia la eficiencia de la búsqueda binaria comparada con la búsqueda
secuencial.
Referencias bibliográficas
[1] L. J. Aguilar, “Programación en C++: Algoritmos, estructuras de datos y objetos”, 1ra Ed.
Madrid: McGraw-Hill, 2008.
[3] T. Cormen, et al., “Introduction to algorithms”, 3ra Ed. Cambridge: The MIT Press, 2009.

Você também pode gostar