Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Quick Sort
Quick Sort
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
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
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.
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.
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
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
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
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