SlideShare una empresa de Scribd logo
1 de 15
POR:
JUAN ARPI &
ANDRÉ JARAMILLO
CONTENIDO
 INTRODUCCIÓN
 ORDEN DE COMPLEJIDAD
 ESTRATEGIA DE ORDENAMIENTO
 EJEMPLO DE EXPLICACIÓN
 PSEUDOCÓDIGO QUICK SORT
 CÓDIGO EN LENGUAJE C PARA VECTORES
 CÓDIGO EN LENGUAJE C PARA LISTAS LIGADAS
 VENTAJAS Y DESVENTAJAS
 DONDE SE IMPLEMENTA
INTRODUCCIÓN
• Quicksort es un algoritmo basado en la técnica de divide y vencerás, que
permite, en promedio, ordenar n elementos en un tiempo proporcional a
n log n.
• Este método fue creado por el científico británico Charles Antony
Richard Hoare en 1960
• Actualmente es el más eficiente y veloz de los métodos de ordenación
interna.
ORDEN DE COMPLEJIDAD
 ORDEN DE COMPLEJIDAD PARA EL MEJOR CASO
 ORDEN DE COMPLEJIDAD PARA EL PEOR CASO
 ORDEN DE COMPLEJIDAD PARA EL CASO
PROMEDIO
ESTRATEGIA DE ORDENAMIENTO
 El algoritmo quick sort básicamente consiste en
elegir un pivote y hacer comparaciones hasta que
los elementos mayores estén a la derecha y los
menores a la izquierda del pivote, hasta que el
pivote encuentra su lugar ordenado.
 Los elementos de la izquierda como los de la
derecha serán dos sub listas y se aplicara el
mismo proceso eligiendo un pivote a cada lista
hasta que cada pivote queda en un lugar
ordenado.
 Generalmente se escoge de pivote al primer
elemento.
EJEMPLO DE EXPLICACION:
Ejemplo Pseudocódigo
PROCEDURE Quicksort(VAR a:vector;prim,ult:CARDINAL);
VAR l:CARDINAL;
BEGIN
IF prim<ult THEN
l:=Pivote(a,a[prim],prim,ult);
Quicksort(a,prim,l-1); //recursividad
Quicksort(a,l+1,ult) //recursividad
END
END Quicksort;
PROCEDURE Pivote(VAR a:vector;p:INTEGER;prim,ult:CARDINAL)
VAR i,l:CARDINAL;
BEGIN
i:=prim; l:=ult+1;
REPEAT INC(i) UNTIL (a[i]>p) OR (i>=ult);
REPEAT DEC(l) UNTIL (a[l]<=p);
WHILE i<l DO
Intercambia(a,i,l);
REPEAT INC(i) UNTIL (a[i]>p);
REPEAT DEC(l) UNTIL (a[l]<=p)
END;
Intercambia(a,prim,l);
RETURN l
END Pivote;
Ejemplo Código C - Arreglo
void qs(int lista[],int limite_izq,int limite_der){
int izq,der,temporal,pivote;
izq =limite_izq;
der = limite_der;
pivote = lista[(izq+der)/2];
do{
while(lista[izq]<pivote && izq<limite_der)izq++;
while(pivote<lista[der] && der > limite_izq)der--;
if(izq <=der){
temporal= lista[izq];
lista[izq]=lista[der];
lista[der]=temporal;
izq++;
der--;
}
}while(izq<=der);
if(limite_izq<der){qs(lista,limite_izq,der);}
if(limite_der>izq){qs(lista,izq,limite_der);}
}
void quicksort(int lista[],int n){
qs(lista,0,n-1);
}
int main(int argc, const char * argv[]){
int i=0;
int lista[] = {100,56,0,1,-45,2,46,5,9,6,67,23,5};
int size = sizeof(lista)/sizeof(int);
printf("nntLista Desordenada n");
for ( i=0; i<size; i++) {
printf(" |%d|",lista[i]);
if(i<size-1)
printf(",");
}
quicksort(lista,size);
printf(“nntLista Ordenada nn");
for ( i=0; i<size; i++) {
printf(" |%d|",lista[i]);
if(i<size-1)
printf(",");
}
system("PAUSE");
return 0;
}
Ejemplo Código C – Lista ligada
Datos *quicksort(Datos *primero, Datos *ultimo, int
(*comp)(void*,void*)){
Dato *r, *p, *s, *t, *w, *u;
t = w = s = u = NULL; /*apùntadores a las sublistas*/
r = ultimo->sig; /*un apuntador al final para
engancharla de nuevo*/
p = primero->sig; /*el primer elemento para comparar*/
if (primero == ultimo) /*si la lista es solo un elemento
está ordenada*/
return primero;
while (p != r){ /*el loop que la separa en dos conjuntos*/
/*el primer elemento de la lista va a ser el elemento
pivot*/
if((*comp)(p, primero) < 0)
if(s == NULL)
t = s = p;
else {
s->sig = p;
s = s->sig;
}
else
if(u == NULL)
w = u = p;
else {
u->sig = p;
u = u->sig;
}
p = p->sig;
}
if (s == NULL){ /*si uno de los conjuntos estaba vacio*/
primero->sig = quicksort(w,u,comp); /*ordenamos el
otro conjunto*/
return primero;
}
if (u == NULL){/*lo mismo si el otro sub-conjunto
estaba vacio*/
s->sig = primero;
primero->sig = r;
return quicksort(t,s,comp);
}
s->sig = primero; /*si los dos estaban con datos los
enganchamos*/
u->sig = r;
primero->sig = quicksort(w,u,comp);
return quicksort(t, s,comp);
}
Ventajas y Desventajas
 Ventajas.
 Es el método de ordenamiento más rápido conocido.
 Usa la recursividad evitando el uso innecesario de código
masivo.
 Usa la estrategia de divide y vencerás, es decir aplica
paralelismo.
 Desventajas.
 Debe prestarse mucha atención para evitar que un pequeño
error de programación nos atrape en un bucle infinito.
 Es fuertemente dependiente de la “suerte”, es decir la
ubicación del pivote.
IMPLEMENTACION DE QUICK SORT
 Mostrar un listado ordenado del contenido de una
base de base de datos (p.ej. listado listado alfabético).
 Ordenar los resultados de una búsqueda en Internet
(p.ej. Google PageRank).
 Realizar una búsqueda.
 En estadística encontrar la mediana.
 Encontrar el par más cercano.
 Detectar duplicados.
PREGUNTAS ?
GRACIAS POR
SU ATENCION

Más contenido relacionado

La actualidad más candente

Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamicagusolis93
 
Recursividad Con C#
Recursividad Con C#Recursividad Con C#
Recursividad Con C#rezzaca
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortlinkinpark03
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datospepelebu1313
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no linealeslos4estatidinamicos
 
Mapa Conceptual de Grafos
Mapa Conceptual de GrafosMapa Conceptual de Grafos
Mapa Conceptual de GrafosSandra Biondi
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento internoFernando Solis
 

La actualidad más candente (20)

Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Mergesort
MergesortMergesort
Mergesort
 
Heap sort
Heap sortHeap sort
Heap sort
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Ordenamiento por insercion
Ordenamiento por insercionOrdenamiento por insercion
Ordenamiento por insercion
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Recursividad Con C#
Recursividad Con C#Recursividad Con C#
Recursividad Con C#
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Metodo de busqueda
Metodo de busquedaMetodo de busqueda
Metodo de busqueda
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sort
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datos
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no lineales
 
Heap sort
Heap sortHeap sort
Heap sort
 
Quicksort
QuicksortQuicksort
Quicksort
 
Metodo quicksort
Metodo quicksortMetodo quicksort
Metodo quicksort
 
Algoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap SortAlgoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap Sort
 
Mapa Conceptual de Grafos
Mapa Conceptual de GrafosMapa Conceptual de Grafos
Mapa Conceptual de Grafos
 
332 presentacion grafos
332 presentacion grafos332 presentacion grafos
332 presentacion grafos
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno
 

Similar a Ordenamiento QuickSort

Similar a Ordenamiento QuickSort (20)

Tiempo de ejecucion de particiones (quicksort)
Tiempo de ejecucion de particiones (quicksort)Tiempo de ejecucion de particiones (quicksort)
Tiempo de ejecucion de particiones (quicksort)
 
Algoritmos Ordenamiento
Algoritmos OrdenamientoAlgoritmos Ordenamiento
Algoritmos Ordenamiento
 
Algoritmos De Ordenacion
Algoritmos De OrdenacionAlgoritmos De Ordenacion
Algoritmos De Ordenacion
 
Algoritmo metodo quicksort
Algoritmo metodo quicksortAlgoritmo metodo quicksort
Algoritmo metodo quicksort
 
Quicksort
QuicksortQuicksort
Quicksort
 
Ordena 2en1
Ordena 2en1Ordena 2en1
Ordena 2en1
 
informe unidad 5 -Metodos de ordenamiento-
informe unidad 5 -Metodos de ordenamiento- informe unidad 5 -Metodos de ordenamiento-
informe unidad 5 -Metodos de ordenamiento-
 
Jflambert lyada - ayudantia matematicas discretas
Jflambert   lyada - ayudantia matematicas discretasJflambert   lyada - ayudantia matematicas discretas
Jflambert lyada - ayudantia matematicas discretas
 
Jflambert lyada - ayudantia ordenamiento y teo maestro
Jflambert   lyada - ayudantia ordenamiento y teo maestroJflambert   lyada - ayudantia ordenamiento y teo maestro
Jflambert lyada - ayudantia ordenamiento y teo maestro
 
Diapositiva
DiapositivaDiapositiva
Diapositiva
 
Ordenar arreglos en java
Ordenar arreglos en javaOrdenar arreglos en java
Ordenar arreglos en java
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Parte
 
Informe ordenamiento
Informe ordenamientoInforme ordenamiento
Informe ordenamiento
 
Arreglos2
Arreglos2Arreglos2
Arreglos2
 
Analisis Clase2
Analisis  Clase2Analisis  Clase2
Analisis Clase2
 
P1
P1P1
P1
 
Palindromos
PalindromosPalindromos
Palindromos
 
Informe ordenamiento
Informe ordenamientoInforme ordenamiento
Informe ordenamiento
 
Informe ordenamiento
Informe ordenamientoInforme ordenamiento
Informe ordenamiento
 
Modelo Simulado
Modelo SimuladoModelo Simulado
Modelo Simulado
 

Ordenamiento QuickSort

  • 2. CONTENIDO  INTRODUCCIÓN  ORDEN DE COMPLEJIDAD  ESTRATEGIA DE ORDENAMIENTO  EJEMPLO DE EXPLICACIÓN  PSEUDOCÓDIGO QUICK SORT  CÓDIGO EN LENGUAJE C PARA VECTORES  CÓDIGO EN LENGUAJE C PARA LISTAS LIGADAS  VENTAJAS Y DESVENTAJAS  DONDE SE IMPLEMENTA
  • 3. INTRODUCCIÓN • Quicksort es un algoritmo basado en la técnica de divide y vencerás, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n. • Este método fue creado por el científico británico Charles Antony Richard Hoare en 1960 • Actualmente es el más eficiente y veloz de los métodos de ordenación interna.
  • 4. ORDEN DE COMPLEJIDAD  ORDEN DE COMPLEJIDAD PARA EL MEJOR CASO  ORDEN DE COMPLEJIDAD PARA EL PEOR CASO  ORDEN DE COMPLEJIDAD PARA EL CASO PROMEDIO
  • 5. ESTRATEGIA DE ORDENAMIENTO  El algoritmo quick sort básicamente consiste en elegir un pivote y hacer comparaciones hasta que los elementos mayores estén a la derecha y los menores a la izquierda del pivote, hasta que el pivote encuentra su lugar ordenado.  Los elementos de la izquierda como los de la derecha serán dos sub listas y se aplicara el mismo proceso eligiendo un pivote a cada lista hasta que cada pivote queda en un lugar ordenado.  Generalmente se escoge de pivote al primer elemento.
  • 7.
  • 8.
  • 9. Ejemplo Pseudocódigo PROCEDURE Quicksort(VAR a:vector;prim,ult:CARDINAL); VAR l:CARDINAL; BEGIN IF prim<ult THEN l:=Pivote(a,a[prim],prim,ult); Quicksort(a,prim,l-1); //recursividad Quicksort(a,l+1,ult) //recursividad END END Quicksort; PROCEDURE Pivote(VAR a:vector;p:INTEGER;prim,ult:CARDINAL) VAR i,l:CARDINAL; BEGIN i:=prim; l:=ult+1; REPEAT INC(i) UNTIL (a[i]>p) OR (i>=ult); REPEAT DEC(l) UNTIL (a[l]<=p); WHILE i<l DO Intercambia(a,i,l); REPEAT INC(i) UNTIL (a[i]>p); REPEAT DEC(l) UNTIL (a[l]<=p) END; Intercambia(a,prim,l); RETURN l END Pivote;
  • 10. Ejemplo Código C - Arreglo void qs(int lista[],int limite_izq,int limite_der){ int izq,der,temporal,pivote; izq =limite_izq; der = limite_der; pivote = lista[(izq+der)/2]; do{ while(lista[izq]<pivote && izq<limite_der)izq++; while(pivote<lista[der] && der > limite_izq)der--; if(izq <=der){ temporal= lista[izq]; lista[izq]=lista[der]; lista[der]=temporal; izq++; der--; } }while(izq<=der); if(limite_izq<der){qs(lista,limite_izq,der);} if(limite_der>izq){qs(lista,izq,limite_der);} } void quicksort(int lista[],int n){ qs(lista,0,n-1); } int main(int argc, const char * argv[]){ int i=0; int lista[] = {100,56,0,1,-45,2,46,5,9,6,67,23,5}; int size = sizeof(lista)/sizeof(int); printf("nntLista Desordenada n"); for ( i=0; i<size; i++) { printf(" |%d|",lista[i]); if(i<size-1) printf(","); } quicksort(lista,size); printf(“nntLista Ordenada nn"); for ( i=0; i<size; i++) { printf(" |%d|",lista[i]); if(i<size-1) printf(","); } system("PAUSE"); return 0; }
  • 11. Ejemplo Código C – Lista ligada Datos *quicksort(Datos *primero, Datos *ultimo, int (*comp)(void*,void*)){ Dato *r, *p, *s, *t, *w, *u; t = w = s = u = NULL; /*apùntadores a las sublistas*/ r = ultimo->sig; /*un apuntador al final para engancharla de nuevo*/ p = primero->sig; /*el primer elemento para comparar*/ if (primero == ultimo) /*si la lista es solo un elemento está ordenada*/ return primero; while (p != r){ /*el loop que la separa en dos conjuntos*/ /*el primer elemento de la lista va a ser el elemento pivot*/ if((*comp)(p, primero) < 0) if(s == NULL) t = s = p; else { s->sig = p; s = s->sig; } else if(u == NULL) w = u = p; else { u->sig = p; u = u->sig; } p = p->sig; } if (s == NULL){ /*si uno de los conjuntos estaba vacio*/ primero->sig = quicksort(w,u,comp); /*ordenamos el otro conjunto*/ return primero; } if (u == NULL){/*lo mismo si el otro sub-conjunto estaba vacio*/ s->sig = primero; primero->sig = r; return quicksort(t,s,comp); } s->sig = primero; /*si los dos estaban con datos los enganchamos*/ u->sig = r; primero->sig = quicksort(w,u,comp); return quicksort(t, s,comp); }
  • 12. Ventajas y Desventajas  Ventajas.  Es el método de ordenamiento más rápido conocido.  Usa la recursividad evitando el uso innecesario de código masivo.  Usa la estrategia de divide y vencerás, es decir aplica paralelismo.  Desventajas.  Debe prestarse mucha atención para evitar que un pequeño error de programación nos atrape en un bucle infinito.  Es fuertemente dependiente de la “suerte”, es decir la ubicación del pivote.
  • 13. IMPLEMENTACION DE QUICK SORT  Mostrar un listado ordenado del contenido de una base de base de datos (p.ej. listado listado alfabético).  Ordenar los resultados de una búsqueda en Internet (p.ej. Google PageRank).  Realizar una búsqueda.  En estadística encontrar la mediana.  Encontrar el par más cercano.  Detectar duplicados.