En computacin y matemticas un algoritmo de ordenamiento es un algoritmo que
pone elementos de una lista o un vector en una secuencia dada por una relacin de orden, es decir, el resultado de salida ha de ser una permutacin o reordenamiento de la entrada que satisfaga la relacin de orden dada. Las relaciones de orden ms usadas son el orden numrico y el orden lexicogrfico. Ordenamientos eficientes son importantes para optimiar el uso de otros algoritmos !como los de "#squeda y fusin$ que requieren listas ordenadas para una e%ecucin rpida. &am"in es #til para poner datos en forma cannica y para generar resultados legi"les por humanos. Clasificacin Los algoritmos de ordenamiento se pueden clasificar de las siguientes maneras' La ms com#n es clasificar seg#n el lugar donde se realice la ordenacin o (lgoritmos de ordenamiento interno' en la memoria del ordenador. o (lgoritmos de ordenamiento externo' en un lugar externo como un disco duro. )or el tiempo que tardan en realiar la ordenacin, dadas entradas ya ordenadas o inversamente ordenadas' o (lgoritmos de ordenacin natural' &arda lo m*nimo posi"le cuando la entrada est ordenada. o (lgoritmos de ordenacin no natural' &arda lo m*nimo posi"le cuando la entrada est inversamente ordenada. )or esta"ilidad' un ordenamiento esta"le mantiene el orden relativo que ten*an originalmente los elementos con claves iguales. )or e%emplo, si una lista ordenada por fecha se reordena en orden alfa"tico con un algoritmo esta"le, todos los elementos cuya clave alfa"tica sea la misma quedarn en orden de fecha. Otro caso ser*a cuando no interesan las may#sculas y min#sculas, pero se quiere que si una clave a+, esta"a antes que (",, en el resultado am"as claves aparecan %untas y en el orden original' a+,, (",. ,uando los elementos son indistingui"les !porque cada elemento se ordena por la clave completa$ la esta"ilidad no interesa. Los algoritmos de ordenamiento que no son esta"les se pueden implementar para que s* lo sean. -na manera de hacer esto es modificar artificialmente la clave de ordenamiento de modo que la posicin original en la lista participe del ordenamiento en caso de coincidencia. Los algoritmos se distinguen por las siguientes caracter*sticas' ,omple%idad computacional !peor caso, caso promedio y me%or caso$ en trminos de n, el tama.o de la lista o arreglo. )ara esto se usa el concepto de orden de una funcin y se usa la notacin O!n$. El me%or comportamiento para ordenar !si no se aprovecha la estructura de las claves$ es O!n log n$. Los algoritmos ms simples son cuadrticos, es decir O!n/$. Los algoritmos que aprovechan la estructura de las claves de ordenamiento !p. e%. bucket sort$ pueden ordenar en O!kn$ donde k es el tama.o del espacio de claves. ,omo dicho tama.o es conocido a priori, se puede decir que estos algoritmos tienen un desempe.o lineal, es decir O!n$. -so de memoria y otros recursos computacionales. &am"in se usa la notacin O!n$. Ordenamiento de burbuja El Ordenamiento de Burbuja !Bubble Sort en ingls$ es un sencillo algoritmo de ordenamiento. 0unciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercam"indolos de posicin si estn en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten ms intercam"ios, lo cual significa que la lista est ordenada. Este algoritmo o"tiene su nom"re de la forma con la que su"en por la lista los elementos durante los intercam"ios, como si fueran peque.as 1"ur"u%as1. &am"in es conocido como el mtodo del intercambio directo. 2ado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparacin, siendo el ms sencillo de implementar. -na manera simple de expresar el ordenamiento de "ur"u%a en pseudocdigo es la siguiente' Algoritmo Ordenamiento de "ur"u%a Procedimiento Haga lo siguiente: Para hasta haga lo siguiente: Si entonces: Repita mientras La instruccin significa que se de"e intercam"iar el valor de con el de . El algor*tmo tam"in puede ser expresado de manera equivalente como sigue' Algoritmo Ordenamiento de "ur"u%a Procedimiento Para hasta haga lo siguiente: Para hasta haga lo siguiente: Si entonces: 3otar que' 4e supone que los vectores que se estn ordenando empiean en la posicin cero !5$ y terminan en la posicin n 6 7. El ordenamiento se hace de menor a mayor, si se quisiera hacer al revs "astar*a con cam"iar el sentido de la comparacin en las sentencias si de cada algoritmo, es decir, donde pone 898 poner 8:8. Quicksort El ordenamiento rpido !uicksort en ingls$ es un algoritmo "asado en la tcnica de divide y vencers, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n. Esta es la tcnica de ordenamiento ms rpida conocida. 0ue desarrollada por ,. (ntony ;. <oare en 7=>5. El algoritmo original es recursivo, pero se utilian versiones iterativas para me%orar su rendimiento !los algoritmos recursivos son en general ms lentos que los iterativos, y consumen ms recursos$. Descripcin del algoritmo El algoritmo fundamental es el siguiente' Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pi!ote. ;esituar los dems elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que l, y al otro los mayores. En este momento, el pivote ocupa exactamente el lugar que le corresponder en la lista ordenada. La lista queda separada en dos su"listas, una formada por los elementos a la iquierda del pivote, y otra por los elementos a su derecha. ;epetir este proceso de forma recursiva para cada su"lista mientras stas contengan ms de un elemento. -na ve terminado este proceso todos los elementos estarn ordenados. ,omo se puede suponer, la eficiencia del algoritmo depende de la posicin en la que termine el pivote elegido. En el me%or caso, el pivote termina en el centro de la lista, dividindola en dos su"listas de igual tama.o. En este caso, el orden de comple%idad del algoritmo es O"n#log n$. En el peor caso, el pivote termina en un extremo de la lista. El orden de comple%idad del algoritmo es entonces de O"n%$. El peor caso depender de la implementacin del algoritmo, aunque ha"itualmente ocurre en listas que se encuentran ordenadas, o casi ordenadas. En el caso promedio, el orden es O"n#log n$. 3o es extra.o, pues, que la mayor*a de optimiaciones que se aplican al algoritmo se centren en la eleccin del pi!ote. ?nsertado Ordenado' 4i el vector no esta ordenado tienes que ordenarlo con este procedimiento' procedure quic@sort!var a' vectorA inf,sup ' integer$A var piv,tmp,i,% ' integerA "egin if inf :B sup then "egin piv 'B aCsupDA i 'B inf E 7A % 'B supA repeat repeat i 'B i F 7 until aCiD 9B pivA repeat % 'B % E 7 until aC%D :B pivA tmp 'B aCiDA aCiD 'B aC%DA aC%D 'B tmp until % :B iA aC%D 'B aCiDA aCiD 'B aCsupDA aCsupD 'B tmpA quic@sort!a,inf,i E 7$A quic@sort!a,i F 7,sup$ end endA para insertar luego el elemento tienes que "iscar su posicin teniendo en cuenta que no este repetido y como esta ordenado el vector si de forma ascendente o descendente' i'B7 enc'BfalseA Ghile !i:BnHelementosHdeHv$ do or not enc "egin if vectorCiDBelemento then "egin Grite!8El elemento ya existe en el vector8$A enc'BtrueA endA else if vectorCiD9elemento then "egin pos'BiA enc'BtrueA end else i'BiF7A endA ?nsertado 2esordenado' ?nicio Leer' 3 ;epita Escri"a I7' Leer JectorK Escri"a IL' ?mprimir JectorK Escri"a IM' ?nsertar 2esordenadoK Escri"a IEsco%a su opcinK ,asos de Opcin' ,aso 7' LeerHJec !3, ($ ,aso L' ?mprimirHJec !3, ($ ,aso M' Lea Jin7 ?nsertarH2esordenado !3,( Jin7$ 0inH,asos 0in 2ise.o Estructurado de (lgoritmos ?nvestigacin' (lgoritmos de Ordenamiento )rofesora' Ntra. Eri@a Olivos ,. (lumno' ?s"al (ltamirano Ome. Orupo' 75M