Está en la página 1de 10

RESUMEN

En este informe detallaremos principalmente un algoritmo de ordenacin que es probablemente el ms utilizado de todos, nos referimos a la Ordenacin Rpida (QUIC !OR"#$ El algoritmo bsico fue creado en %&'( por C$)$R$ *oare + publicado en %&', + desde entonces -a sido estudiado ob.eto de numerosos estudios$ El Quic/sort es popular porque a pesar de su no tan fcil implementacin, proporciona unos buenos resultados generales (funciona bien en una amplia di0ersidad de situaciones# + en muc-os casos consume menos recursos que cualquier otro m1todo de ordenacin, por cual el m1todo -a sido posiblemente calificado como el ms peque2o cdigo, ms rpido, ms elegante, ms interesante + eficiente de los algoritmos conocidos de ordenacin$ 3a idea central de este algoritmo consiste en los siguientes4 !e toma un elemento 5 de una posicin cualquiera del arreglo$ !e trata de ubicar a 5 en la posicin correcta del arreglo, de tal forma que todos los elementos que se encuentran a su izquierda sean menores o iguales a 5 + todos los 6elementos que se encuentren a su derec-a sean ma+ores o iguales a 5$ !e repiten los pasos anteriores pero a-ora para los con.untos de datos que se encuentran a la izquierda + a la derec-a de la posicin correcta de 5 en el arreglo$ El anlisis -a sido comprobado por una e5tensa e5periencia emp7rica -asta el punto de con0ertirse en el m1todo elegido en una gran 0ariedad de aplicaciones prcticas de ordenacin teniendo as7 una comple.idad en el me.or de los casos$ 8esde su creacin -an intentado + analizado nue0as 0ersiones del algoritmo, pero es fcil decepcionarse porque este algoritmo est bien equilibrado, que las me.oras en una parte del programa pueden estar ms que compensados por las consecuencias de un mal rendimiento de otra pero por eso no me.oran sustancialmente a Quic/sort$

INTRODUCCIN
Ordenacin + 9:squeda son operaciones bsicas en el campo de la documentacin + en las que seg:n se2alan estad7sticas, las computadoras emplean la mitad de su tiempo$ )unque su uso puede ser con 0ectores + con arc-i0os, nos referiremos a 0ectores$ 3a ordenacin (clasificacin# es la operacin de organizar un con.unto de datos en alg:n orden dado, tal como creciente o decreciente en datos num1ricos, o bien en orden alfab1tico directo o in0erso$ Operaciones t7picas de ordenacin son4 lista de n:meros, arc-i0os de clientes de banco, nombres de una agenda telefnica, etc$ En s7ntesis la ordenacin significa poner ob.etos en orden (orden num1ricos para los n:meros + alfab1tico para los caracteres# ascendente o descendente$ ;or e.emplo, las clasificaciones de los equipos de f:tbol, se pueden organizar en orden alfab1tico creciente<decreciente o bien por su punta.e obtenido ascendente<descendente$ El propsito final de la clasificacin es facilitar la manipulacin de datos en un 0ector$ E5isten di0ersos m1todos de ordenacin o clasificacin, con diferentes 0enta.as e incon0enientes donde debemos tener en cuenta las eficiencias en cuanto al tiempo siendo m1todo quic/sort uno de ellos, que abarcaremos principalmente aplicados a 0ectores pero se pueden e5tender a matrices o tablas, considerando la ordenacin respecto a fila o columna, quic/sort nos permitir ordenar 0ectores con un gran n:mero de elementos + manipular dic-o 0ector$

CONTENIDO
ORIGEN
In0entado por !ir C-arles )nton+ Ric-ard *oare (cient7fico 9ritnico en computacin# en %&'(, cuando 0isit la Uni0ersidad de =osc: cuando era estudiante$ >l cre el ?Quic/sort@ al intentar traducir un diccionario de ingl1s para ruso, ordenando las palabras, teniendo como ob.eti0o reducir el problema original en subproblemas que puedan ser resueltos ms fcil + rpidamente$ Aue publicado en %&', despu1s de una serie de afinamientos$

DEFINICION
El ordenamiento rpido (quic/sort en ingl1s# es un algoritmo basado en la t1cnica de di0ide + 0encers, que permite, en promedio, ordenar ?n@ elementos en un tiempo proporcional a nBlog(n#$ Esta es la t1cnica de ordenamiento ms rpida conocida$ El algoritmo original es recursi0o, pero se utilizan 0ersiones iterati0as para me.orar su rendimiento$ Dividir: el arreglo se particiona en dos sub6arreglos no 0ac7os, tal que cada elemento de un sub6arreglo sea menor o igual a los elementos del otro sub6arreglo$ Conquistar: los dos arreglos son ordenados llamando recursi0amente a quic/sort$ Combinar: Como cada arreglo +a est ordenado, no se requiere traba.o adicional$

CARACTERISTICAS
Este m1todo se basa en la tctica ?di0ide + 0encers@4 consiste en di0idir un problema en subproblemas + luego .untar las respuestas de estos subproblemas para obtener la solucin al problema central (subdi0idiendo el arra+ en arra+s ms peque2os + ordenar estos#$ Es considerado entre los ms rpidos + eficientes de los m1todos de ordenacin interna$ El tiempo en marc-a del algoritmo esencialmente depende de la opcin del elemento del pi0ote$ ;osible reduccin de desempe2o debido a uso de recursos$ "iempo de e.ecucin depende de los datos de entrada

ALGORITMO
%$ Elegimos un elemento 0 (llamado pi0ote# del arra+ de datos$ ,$ ;articionados el arra+ de datos ) en dos arra+s4 )% C 3os elementos del arra+ que se encuentran a la izquierda del pi0ote$ )qu7 se buscaran el n:mero ma+or que el pi0ote$ Una 0ez ubicado el ma+or de la izquierda tan solo se guarda su posicin para luego usarla$ ), C 3os elementos del arra+ que se encuentran a la derec-a del pi0ote$ )qu7 se buscaran el n:mero menor que el pi0ote$

Una 0ez ubicado el menor de la derec-a tan solo se guarda su posicin para luego usarla$

D$ 3uego de tener las posiciones se proceder a intercambiar sus contenidos$ E$ )plicamos la recursin sobre )% + ), F$ Realizamos el :ltimo paso de Gdi0ide + 0encersG que es unir todas las soluciones$ ;ara que formen el arra+ ) ordenado$

DIAGRAMA DE FLUJO

PSEUDOCODIGO
variables A: arreglo[N] entero variables i,j variables izq, der para i = 1 hasta N leer(A[i]) Fin para izq = 1 der = N qsort(A[],N) Fin Fun ion qsort(izq, der) i = izq j = der pivote = A[(izq ! der) div "] repetir #ientras A[i] j = j $ 1 %in #ientras si i & = j au' = A[i] A[j] = A[i] A[i] = au' i = i ! 1 j = j $ 1 %in si hasta que i ( j si izq & j partir(izq,j) %in si si i & der partir(i, der) %in si %in %un ion qsort

FUNCION IMPLEMENTADA EN C# (C Sharp)


using using using using System; System.Collections.Generic; System.Linq; System.Text;

namespace QuickSort { class Ordenamiento { private static int cont; pu lic Ordenamiento!" { cont # $; % pu lic static void s&ap!int'( datos) int i) int *" { int aux # datos'i(; datos'i( # datos'*(; datos'*( # aux; cont++; ,, varia le glo al % pu lic static int Ordenamiento-apido!int'( datos) int numero" { cont # $; Ordenamiento-apido!datos) $) numero . /"; return cont; % pu lic static void Ordenamiento-apido!int'( datos) int in0) int sup" { i0 !sup 1 in0" { int pivote # datos'sup(; int i # in0 . /; int * # sup; do { &2ile !datos'++i( 3 pivote" ; &2ile !datos'..*( 1 pivote" ; i0 !i 3 *" s&ap!datos) i) *"; % &2ile !i 3 *"; s&ap!datos) i) sup"; Ordenamiento-apido!datos) in0) i . /"; Ordenamiento-apido!datos) i + /) sup"; % %

static void 4ain!string'( args" { int limite; String linea; Console.5oregroundColor # ConsoleColor.Green; Console.6riteLine!78LGO-9T4O -:8L9;8<O =O- L>9S 8L?8-:; ,, -9C8-<O
@94:A:; Bn7";

Console.5oregroundColor # ConsoleColor.Cyan; Console.6riteLine!7Ordenamento rapido Casado en lengua*e CD...Bn7"; Console.6rite!79ngresa valor del limiteE 7"; Console.5oregroundColor # ConsoleColor.-ed; linea # Console.-eadLine!"; limite # int.=arse!linea"; int'( arreglo # ne& int'limite(; 0or !int i # $; i 3 limite; ++i" { Console.6rite!7{$% E 7) i + /"; linea # Console.-eadLine!"; arreglo'i( # int.=arse!linea"; % Console.5oregroundColor # ConsoleColor.Fello&; Console.6riteLine!7Los valores ordendos sonE 7"; Ordenamiento-apido!arreglo) limite"; Console.5oregroundColor # ConsoleColor.Fello&; 0or !int i # $; i 3 limite; ++i" { Console.6riteLine!7Bn{$% E {/%7) i + /) arreglo'i("; % Console.-eadGey!";

% % %

EJEMPLO PRCTICO
0 1 2 3 4

A [8]=

5
i=0 j=4

3
x=A [2]=5

A [8]=

1<5 (V) i=1 4<5 (V) i=2 3>5 (F) j=4 CAMBIO
0 1 2 3 4

A [8]=

i=3

j=3

x=A [2]=5

A [8]=

1
j=3

4
x=A [2]=5

i=4

quick !"# (A$0$4) 0 1 2 3

A [8] = i=0

1
j=3

4
x=A [1]=4

A [8] =

i=0

j=3

x=A [1] = 4

A [8] =

FI% &'( A()O*I+MO 0 1 2 3 4

A [8]=

COMPLEJIDAD
Es el algoritmo de ordenacin ms rpido (en la prctica# conocido$ !u tiempo de e.ecucin promedio es O(H log(H##$ ;ara el peor caso tiene un tiempo O (H,#, pero si se codifica correctamente las situaciones en las que sucede el peor caso pueden -acerse altamente improbables$ En la prctica, el -ec-o de que sea ms rpido que los dems algoritmos de ordenacin con el mismo tiempo promedio O(H log(H## est dado por un ciclo Interno mu+ a.ustado (pocas operaciones#$

APLICACIONES
Ordenacin en los e5menes de admisin de acuerdo a los punta.es obtenidos$I Ordenar los punta.es para conocer en ran/ing en di0ersos .uegos, concurso, etc$ =ane.ar las producciones industriales de acuerdo en su porcenta.e en 0entas Registros de almacenes$

CONCLUSIONES
)nalizando quic/sort en el me.or + peor caso se puede 0er que es uno de los me.ores m1todos de ordenacin, su implementacin a pesar de no ser mu+ sencilla tampoco es complicada -aciendo de este un algoritmo interesante + de elegante estructura + de muc-a eficiencia$ Este algoritmo de ordenacin es un e.emplo claro de que el m1todo di0ide + 0encers es efecti0o cuando tienes cantidades grandes de datos por traba.ar + necesitas a-orrar tiempo + recursos$ RECOMENDACIONES El m1todo de ordenacin en un caso ordinario es eficiente para grandes cantidades de datos, porque si se quiere procesar cantidades peque2as los algoritmos de burbu.a e insercin son ms eficientes$ !i se usa el m1todo de ordenacin quic/sort es me.or implementar su cdigo seleccionado como pi0ote el t1rmino medio del 0ector porque es ms fcil de implementar + su cdigo es ms sencillo$

También podría gustarte