Está en la página 1de 10

"AÑO DE LA LUCHA CONTRA LA VIOLENCIA HACIA LAS MUJERES Y LA

ERRADICACIÓN DEL FEMINICIDIO”

Universidad : Universidad Nacional Mayor de San Marcos

Facultad : Ingeniería Industrial

Carrera : Ingeniería Industrial

Tema : Algoritmos de ordenación

Docente : Edgar Ruiz Lizama

Curso : Algoritmos y programación

Sección : 2

Ciclo : III

1
2
Introducción y Planteamiento

Desde los inicios de la computación, el problema del ordenamiento ha causado gran cantidad de

investigación probablemente debido a la complejidad de resolverlo eficientemente a pesar de su

planteamiento simple y familiar.

Los algoritmos de ordenamiento son comunes en las clases introductorias a la computación,

donde la abundancia de algoritmos para el problema proporciona una gentil introducción a la

variedad de conceptos núcleo de los algoritmos, como notación de O mayúscula, algoritmos

divide y vencerás, estructuras de datos, análisis de los casos peor, mejor, y promedio, y límites

inferiores.

A continuación, se mostrará un fragmento de lo que significa e implica esencialmente en el

estudio del C++, los problemas de ordenamiento y su planteo en los diversos estilos y/o tipos de

este:

Los algoritmos de este documento serán escritos en C y serán intercambiables entre si;

es decir, todos aceptarán los mismos parámetros: un array A de datos y un entero que

representa el tamaño del array. Si bien en todo este documento se mostrará como ordenar

de forma creciente (de menor a mayor), esperamos que el lector no tenga problemas

realizar las modificaciones pertinentes (que deberán ser obvias) en los algoritmos para

poder ordenar de forma decreciente. El array de entrada A tendrá elementos de tipo Dato

los cuales podrán ser cualquier tipo de dato representable (una estructura, un objeto de

una clase en particular, un número, un string, etc). Dicho array será usado al estilo C, es

decir los índices de los N elementos de A serán 0, 1, 2, ..., N-1. Se supondrá por

3
simplicidad que los datos aceptan el uso de operadores "<" y ">". Si bien esto no será así

en la práctica, no perderemos generalidad. La estrategia para establecer un orden entre los

elementos dependerá de la tecnología que usemos para implementar el algoritmo de

ordenación. En Appendix A se discute esto con más profundidad y para tres tecnologías

de programación distintas: programación estruturada (C), programación orientada a

objetos (C++) y programación de objetos (Smalltalk, Self, etc.). También se utilizará el

operador de asignación de manera especial en algunos casos. Por ejemplo, en el siguiente

segmento de código, en tmp se almacenará una copia del iésimo elemento del array A de

entrada. (Gurin, 2004, p.2)

Concepto

En la computación un algoritmo de ordenamiento u ordenación es un algoritmo que coloca los

elementos de una lista o un vector en una secuencia dada por una relación de orden, esto quiere

decir que el resultado de salida será una permutación(reordenamiento) de la entrada que satisfaga

la relación de orden dada. Las relaciones de orden más usadas son el orden numérico y el orden

lexicográfico.

4
Clasificación

Según lugar donde se ejecute el ordenamiento.

Algoritmos de ordenación interna.

Se realizan en la memoria del ordenador.

Algoritmos de ordenación externa.

Se realizan en lugar externo (disco duro).

Según el tiempo que se demora la ordenación.

Algoritmos de ordenación natural.

Tarda lo mínimo posible cuando la entrada está ordenada.

Algoritmos de ordenación no natural.

Tarda lo mínimo posible cuando la entrada está inversamente ordenada.

Según la estabilidad.

Algoritmos de ordenamiento estable.

Mantiene el orden relativo que tenían originalmente los elementos con claves iguales.

Algoritmos de ordenamiento inestable.

Se pueden implementar para que sí lo sean. Una manera de hacer esto es modificar

artificialmente la clave de ordenamiento de modo que la posición original en la lista participe del

ordenamiento en caso de coincidencia.

5
Tabla 1

Lista de algoritmos de ordenamiento por complejidad computacional


Estables

Nombre en español Nombre original Complejidad Memoria Método

Ordenamiento de burbuja Bubblesort O(n²) O(1) Intercambio

Ordenamiento de burbuja
Cocktail sort O(n²) O(1) Intercambio
bidireccional

Ordenamiento por inserción Insertion sort O(n²) ("(en el peor de los casos)") O(1) Inserción

No
Ordenamiento por casilleros Bucket sort O(n) O(n)
comparativo

No
Ordenamiento por cuentas Counting sort O(n+k) O(n+k)
comparativo

Ordenamiento por mezcla Merge sort O(n log n) O(n) Mezcla

Ordenamiento con árbol binario Binary tree sort O(n log n) O(n) Inserción

Pigeonhole sort O(n+k) O(k)

No
Ordenamiento Radix Radix sort O(nk) O(n)
comparativo

O(n³) versión
Distribution sort O(n²)
recursiva

Gnome sort O(n²) O(1)

Inestables

Nombre en español Nombre original Complejidad Memoria Método

Ordenamiento Shell Shell sort O(n1.25) O(1) Inserción

Comb sort O(n log n) O(1) Intercambio

Ordenamiento por selección Selection sort O(n²) O(1) Selección

Ordenamiento por montículos Heapsort O(n log n) O(1) Selección

Smoothsort O(n log n) O(1) Selección

Ordenamiento rápido Quicksort Promedio: O(n log n), peor caso: O(n²) O(log n) Partición

Promedio: O(n u), peor caso: O(n²); u=n; u = número único de


Severa Unique Sort
registros

Cuestionables o no prácticos

Nombre en español Nombre original Complejidad Memoria Método

Bogosort O(n × n!), peor: no termina

O(n), excepto en
Pancake sorting
máquinas de Von Neumann

Ordenamiento Aleatorio Randomsort Promedio: O(n!) Peor: No termina

6
7
8
9
REFERENCIAS BIBLIOGRÁFICAS:
Gurin, S. (2004). Algoritmos de ordenación. Recuperado de http://es.tldp.org/Tutoriales/doc-
programacion-algoritmos-ordenacion/alg_orden.pdf

10