Sie sind auf Seite 1von 12

Algoritmos de Ordenamiento

y Complejidad
Adaptacin
Programacin Avanzada
Prim. 2009

ndice
Complejidad Computacional
Algoritmos de Ordenamiento simples
Burbuja
Insercin
Seleccin

Algoritmos de Ordenamiento complejos


Quick Sort
Heap Sort
Shell Sort
2

Complejidad Computacional
Definicin: Mide la eficiencia de un algoritmo en
trminos de tiempo o espacio requeridos.
El Tiempo tiende a ser ms importante.
La eficiencia de un algoritmo siempre se establece
como una funcin del tamao de la entrada.
La notacin Big-O o O(f(n))

Escenario del peor caso


El mximo nmero de pasos computacionales tomados en
cualquier entrada de tamao n.

La estratgia es encontrar el lmite superior ms cercano al


Upper bound
escenario del peor caso.
Actual function
Lower bound

Complejidad del Tiempo


Asumimos que cada operacin en un
programa, toma una unidad de tiempo.
Unidades de Tiempo para calcular
int sum (int n)
------------------------------{
1 por la asignacin.
int partial_sum = 0;
1 asignamiento, n+1 pruebas,
for (int i = 1; i <= n; i++)
y n incrementos.
partial_sum = partial_sum + (i * i );
n iteraciones de 3 unidades por
return partial_sum;
un asignamiento, una suma,
y una }
multiplicacin.
1 por la sentencia return.
---------------------------------------Total: 1+(1+n+1+n)+3n+1
4
= 5n+4 = O(n)

Funciones Bsicas de la
Complejidad del Tiempo
En un orden creciente de complejidad:

Tiempo Constante : O(1)


Tiempo Logartmico : O(logn)
Tiempo Lineal : O(n)
Tiempo Polinomial : O(n2)
Tiempo Exponencial : O(2n)
Supngase que cada paso toma 1 microsegundo (10-6):

Funciones Bsicas de la
Complejidad del Tiempo

Burbuja (Bubble Sort)


El ordenamiento toma una coleccin desordenada y la ordena.
Algoritmo: Bubble Sort :
Compara elementos adyacentes. Si el primero es mayor que el
segundo, intercmbialos.
Realizar esto para cada par de elementos adyacentes, iniciando con los
primeros dos y terminando con los dos ltimos. En este punto, el ltimo
elemento debera ser el mayor de todos.
Repite estos paso para todos los elementos, excepto el ltimo.
Continua la repeticin con un elemento menor cada vez, hasta que no
tengas ms pares que comparar.

Complejidad del algortmo : O(n2)


Demo:
http://web.engr.oregonstate.edu/~minoura/cs162/javaProgs/sort/
Ejemplo: Ordena la lista {12, 5, 7, 9, 2, 6}

Insercin (InsertionSort)
Algoritmo*:
Inicia con el primer elemento de la entrada
Itera sobre el arreglo de entrada hasta que est vaco, eliminando el
elemento restante de ms a la izquierda.
Compara el elemento removido con el elemento actual,iniciando
desde el elemento ms alto, y comparando hacia la izquierda, hasta el
elemento menor
Si el elemento de entrada eliminado es menor que el elemento actual,
copia el valor a un temporal para hacer espacio al nuevo elemento
menor y repite esto con cada elemento que resulte menor.
De otra forma, el nuevo elemento esta en la posicin correcta;
almancnalo en la localidad a la izquierda e inicia nuevamente desde
el paso 2 con el siguiente elemento de entrada.
Complejidad: O(n2)
Demo:

http://web.engr.oregonstate.edu/~minoura/cs162/javaProgs/sort/
Ejemplo: Ordena la lista {12, 5, 7, 9, 2, 6}
8

Seleccin Directa (SelectionSort)


Algoritmo:
Recorre los elementos secuencialmente
En el i-simo paso, seleccionamos el elemento
con el valor menor desde A[i] hasta A[n], luego
intercambiamos el valor menor con A[i].

Complejidad: O(n2)
Demo:

http://web.engr.oregonstate.edu/~minoura/cs162/javaProgs/sort/

Ejemplo: Ordena la lista {25, 57, 48, 37, 12}


9

QuickSort

Quick Sort, tambien conocido como ordenamiento por particin,


ordena empleando la estratgia divide y venceras.
Algoritmo:
Selecciona un elemento pivote de la entrada.
En todas las particiones los elementos menores que el pivote se
colocan a la izquierda de ste y los elementos mayores que el pivote se
colocan a la derecha de ste (para valores iguales, stos pueder ir en
cualquier lado).
Ordena recursivamente la lista de elementos antes del pivote y la lista
de elementos despus del pivote.
La recursin termina cuando la lista contiene cero o un solo elemento.

Time complexity: O(nlogn) or O(n2)


Demo:
http://web.engr.oregonstate.edu/~minoura/cs162/javaProgs/sort/

Example: Ordena la lista {25, 57, 48, 37, 12}


10

Bsqueda
Demos y Cdigo Fuente:
http://web.engr.oregonstate.edu/~minoura
/cs162/javaProgs/search/

11

Preguntas?

12

Das könnte Ihnen auch gefallen