Está en la página 1de 11

RESUMEN

En este informe detallaremos principalmente un algoritmo de ordenacin


que es probablemente el ms utilizado de todos, nos referimos a la
Ordenacin Rpida (QUICKSORT).
El algoritmo bsico fue creado en 1960 por C.A.R. Hoare y publicado en
1962 y desde entonces ha sido estudiado objeto de numerosos estudios.
El Quicksort es popular porque a pesar de su no tan fcil
implementacin, proporciona unos buenos resultados generales
(funciona bien en una amplia diversidad de situaciones) y en muchos
casos consume menos recursos que cualquier otro mtodo de
ordenacin, por cual el mtodo ha sido posiblemente calificado como el
ms pequeo cdigo, ms rpido, ms elegante, ms interesante y
eficiente de los algoritmos conocidos de ordenacin.
La idea central de este algoritmo consiste en los siguientes:
Se toma un elemento x de una posicin cualquiera del arreglo.
Se trata de ubicar a x en la posicin correcta del arreglo, de tal
forma que todos los
elementos que se encuentran a su
izquierda sean menores o iguales a x y todos los -elementos que
se encuentren a su derecha sean mayores o iguales a x.
Se repiten los pasos anteriores pero ahora para los conjuntos de
datos que se encuentran a la izquierda y a la derecha de la
posicin correcta de x en el arreglo.
El anlisis ha sido comprobado por una extensa experiencia
emprica hasta el punto de convertirse en el mtodo elegido en
una gran variedad de aplicaciones prcticas de ordenacin
teniendo as una complejidad en el mejor de los casos.
Desde su creacin han intentado y analizado nuevas versiones del
algoritmo, pero es fcil decepcionarse porque este algoritmo est
bien equilibrado, que las mejoras en una parte del programa
pueden estar ms que compensados por las consecuencias de un
mal rendimiento de otra pero por eso no mejoran sustancialmente
a Quicksort.

INTRODUCCIN
Ordenacin y Bsqueda son operaciones bsicas en el campo de la
documentacin y en las que segn sealan estadsticas, las
computadoras emplean la mitad de su tiempo. Aunque su uso puede ser
con vectores y con archivos, nos referiremos a vectores.
La ordenacin (clasificacin) es la operacin de organizar un conjunto de
datos en algn orden dado, tal como creciente o decreciente en datos
numricos, o bien en orden alfabtico directo o inverso. Operaciones
tpicas de ordenacin son: lista de nmeros, archivos de clientes de
banco, nombres de una agenda telefnica, etc. En sntesis la ordenacin
significa poner objetos en orden (orden numricos para los nmeros y
alfabtico para los caracteres) ascendente o descendente.
Por ejemplo, las clasificaciones de los equipos de ftbol, se pueden
organizar en orden alfabtico creciente/decreciente o bien por su
puntaje obtenido ascendente/descendente. El propsito final de la
clasificacin es facilitar la manipulacin de datos en un vector.
Existen diversos mtodos de ordenacin o clasificacin, con diferentes
ventajas e inconvenientes donde debemos tener en cuenta las
eficiencias en cuanto al tiempo siendo mtodo quicksort uno de ellos,
que abarcaremos principalmente aplicados a vectores pero se pueden
extender a matrices o tablas, considerando la ordenacin respecto a fila
o columna, quicksort nos permitir ordenar vectores con un gran nmero
de elementos y manipular dicho vector.

CONTENIDO
ORIGEN
Inventado por Sir Charles Antony Richard Hoare

(cientfico Britnico en computacin) en 1960, cuando visit la


Universidad de Mosc cuando era estudiante. l cre el Quicksort al
intentar traducir un diccionario de ingls para ruso, ordenando las
palabras, teniendo como objetivo reducir el problema original en
subproblemas que puedan ser resueltos ms fcil y rpidamente. Fue
publicado en 1962 despus de una serie de afinamientos.

DEFINICION
El ordenamiento rpido (quicksort en ingls) es un algoritmo basado 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. El algoritmo original es recursivo,
pero se utilizan versiones iterativas para mejorar su rendimiento.
Dividir: el arreglo se particiona en dos sub-arreglos no vacos, tal

que cada elemento de un sub-arreglo sea menor o igual a los


elementos del otro sub-arreglo.
Conquistar:
los dos arreglos son ordenados llamando
recursivamente a quicksort.
Combinar: Como cada arreglo ya est ordenado, no se requiere
trabajo adicional.

CARACTERISTICAS
Este mtodo se basa en la tctica divide y vencers: consiste en
dividir un problema en subproblemas y luego juntar las respuestas
de estos subproblemas para obtener la solucin al problema
central (subdividiendo el array en arrays ms pequeos y ordenar
estos).
Es considerado entre los ms rpidos y eficientes de los mtodos
de ordenacin interna.
El tiempo en marcha del algoritmo esencialmente depende de la
opcin del elemento del pivote.
Posible reduccin de desempeo debido a uso de recursos.

Tiempo de ejecucin depende de los datos de entrada

ALGORITMO
1. Elegimos un elemento v (llamado pivote) del array de datos.
2. Particionados el array de datos A en dos arrays:
A1 = Los elementos del array que se encuentran a la izquierda del
pivote.
Aqu se buscaran el nmero mayor que el pivote.
Una vez ubicado el mayor de la izquierda tan solo se guarda
su posicin para luego usarla.
A2 = Los elementos del array que se encuentran a la
derecha
del pivote.
Aqu se buscaran el nmero menor que el pivote.
Una vez ubicado el menor de la derecha tan solo se guarda su
posicin para luego usarla.

3. Luego de tener las posiciones se proceder a intercambiar sus


contenidos.
4. Aplicamos la recursin sobre A1 y A2
5. Realizamos el ltimo paso de "divide y vencers" que es unir todas las
soluciones. Para que formen el array A 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
Funcion qsort(izq, der)
i = izq
j = der
pivote = A[(izq + der) div 2]
repetir
mientras A[i]
j = j - 1
fin mientras
si i < = j
aux = A[i]
A[j] = A[i]
A[i] = aux
i = i + 1
j = j - 1
fin si
hasta que i > j
si izq < j
partir(izq,j)

fin si
si i < der
partir(i, der)
fin si
fin funcion 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;
public Ordenamiento()
{
cont = 0;
}
public static void swap(int[] datos, int i, int j)
{
int aux = datos[i];
datos[i] = datos[j];
datos[j] = aux;
cont++; // variable global
}
public static int OrdenamientoRapido(int[] datos, int numero)
{
cont = 0;
OrdenamientoRapido(datos, 0, numero - 1);
return cont;
}
public static void OrdenamientoRapido(int[] datos, int inf, int sup)
{
if (sup > inf)

{
int pivote = datos[sup];
int i = inf - 1;
int j = sup;
do
{
while (datos[++i] < pivote) ;
while (datos[--j] > pivote) ;
if (i < j)
swap(datos, i, j);
}
while (i < j);
swap(datos, i, sup);
OrdenamientoRapido(datos, inf, i - 1);
OrdenamientoRapido(datos, i + 1, sup);
}
}
static void Main(string[] args)
{
int limite;
String linea;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("ALGORITMO REALIZADO POR LUIS ALVAREZ // RICARDO JIMENEZ \n");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Ordenamento rapido Basado en lenguaje C#...\n");
Console.Write("Ingresa valor del limite: ");
Console.ForegroundColor = ConsoleColor.Red;
linea = Console.ReadLine();
limite = int.Parse(linea);
int[] arreglo = new int[limite];
for (int i = 0; i < limite; ++i)
{
Console.Write("{0} : ", i + 1);
linea = Console.ReadLine();
arreglo[i] = int.Parse(linea);
}
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Los valores ordendos son: ");
OrdenamientoRapido(arreglo, limite);
Console.ForegroundColor = ConsoleColor.Yellow;
for (int i = 0; i < limite; ++i)
{
Console.WriteLine("\n{0} : {1}", i + 1, arreglo[i]);
}
Console.ReadKey();
}
}

EJEMPLO PRCTICO
0

A [8]= 1

5
i=0

A [8]= 1

2
j=4

3
x=A [2]=5

1<5 (V) i=1


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

A [8]= 1

i=3

A [8]= 1

i=4

j=3

j=3

x=A [2]=5

x=A [2]=5

quicksort (A,0,4)
0

A [8] =1
i=0

j=3

i=0

j=3

x=A [1] = 4

A [8] =1

x=A [1]=4

A [8] =1

FIN DEL ALGORITMO


0

A [8]= 1

COMPLEJIDAD
Es el algoritmo de ordenacin ms rpido (en la prctica)
conocido. Su tiempo de ejecucin promedio es O(N log(N)).
Para el peor caso tiene un tiempo O (N2), pero si se codifica
correctamente las situaciones en las que sucede el peor caso
pueden hacerse altamente improbables.
En la prctica, el hecho de que sea ms rpido que los dems
algoritmos de ordenacin con el mismo tiempo promedio O(N
log(N)) est dado por un ciclo
Interno muy ajustado (pocas operaciones).

APLICACIONES
Ordenacin en los exmenes de admisin de acuerdo a los
puntajes obtenidos.}
Ordenar los puntajes para conocer en ranking en diversos juegos,
concurso, etc.
Manejar las producciones industriales de acuerdo en su porcentaje
en ventas
Registros de almacenes.

CONCLUSIONES
Analizando quicksort en el mejor y peor caso se puede ver que es
uno de los mejores mtodos de ordenacin, su implementacin a

pesar de no ser muy sencilla tampoco es complicada haciendo de


este un algoritmo interesante y de elegante estructura y de mucha
eficiencia.
Este algoritmo de ordenacin es un ejemplo claro de que el
mtodo divide y vencers es efectivo cuando tienes cantidades
grandes de datos por trabajar y necesitas ahorrar tiempo y
recursos.
RECOMENDACIONES
El mtodo de ordenacin en un caso ordinario es eficiente para
grandes cantidades de datos, porque si se quiere procesar
cantidades pequeas los algoritmos de burbuja e insercin son
ms eficientes.
Si se usa el mtodo de ordenacin quicksort es mejor implementar
su cdigo seleccionado como pivote el trmino medio del vector
porque es ms fcil de implementar y su cdigo es ms sencillo.

También podría gustarte