Trabajo de Investigación - QuickSort

May 14, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Trabajo de Investigación - QuickSort...

Description

Ordenamiento de Vectores Método QuickSort

Carolina Escobar Restrepo Melissa Escobar Restrepo Evelyn Quinchia Velásquez

Fundamentos Profesora!" ###

$niversidad %%% Medell&n' ()*+

Contenido

,ntroducci-n..........................................................................................................( /eneralidades........................................................................................................0 Qu1 es un al2oritmo............. al2oritmo...................... ................. ................. ................. ................. ................. ....................................0 ............................0 Qu1 es un vector.................................................................................................0 3ipos de al2oritmos de ordenamiento................ ordenamiento......................... ............................... ...........................................0 .....................0 4l2oritmos basados en m1todos iterativos".......... iterativos".................. ................. ................. ................. ................. .................0 .........0 4l2oritmos basados en m1todos recursivos.............. recursivos...................... ................. ................. ................ ......................0 ..............0 M1todo Quic5sort 6rdenamiento Rápido!............... Rápido!....................... ................. ..........................................7 .................................7 4l2oritmo fundamental.........................................................................................7 Caracter&sticas del al2oritmo Quic58ort.............. Quic58ort....................... ................. ................. ...................................7 ..........................7 El al2oritmo es el si2uiente".............. si2uiente"...................... ................. ................. ..................................................+ ..........................................+ 9ia2rama de flu:o ordenamiento rápido................. rápido......................... ................. ................. ................ ................. ................; .......; 9escripci-n del al2oritmo.............. al2oritmo....................... ................. ................ ................. ................. .....................................< .............................< =C-mo ele2imos el pivote>................ pivote>........................ ................ ................. ................. ..........................................< ..................................< 4nálisis del al2oritmo...........................................................................................< Comple:idad computacional del Quic5sort.............. Quic5sort...................... ................. ................. ................. ........................? ...............? Comparaci-n de tiempos.............. tiempos...................... ................. ................. ................ ................. ................. [email protected] [email protected] Eli2iendo el pivote............... pivote........................ ................. ................. ................. ................ ................. ................. [email protected] [email protected] Pseudoc-di2o en C................. C......................... ................. ................. ................ ..................................................*) ..........................................*) $n e:emplo.......................................................................................................** 4l2oritmo en Matlab..............................................................................................*( E:emplo *"........................................................................................................*( E:emplo ("........................................................................................................*+ E:emplo 0"........................................................................................................*; Referencias..........................................................................................................*< 9ocumentaci-n"................................................................................................*< Videos".............. Videos"....................... ................. ................ ................. ................. ................. ................. ...........................................*< ...................................*< E:emplo Matlab".............. Matlab"...................... ................. ................. ................. ................. ................ ................. ................................*< .......................*<

Introducción

Aos al2oritmos de ordenamiento nos permiten' como su nombre lo dice' ordenar. En este caso' nos servirán para ordenar vectores o matrices con valores asi2nados aleatoriamente. Bos centraremos en los m1todos más populares' analizando la cantidad de comparaciones que suceden' el tiempo que demora y revisando el c-di2o' escrito en ava' de cada al2oritmo. Este informe nos permitirá conocer más a fondo cada m1todo distinto de ordenamiento' desde uno simple hasta el más comple:o. 8e realizaran comparaciones en tiempo de e:ecuci-n' preDrequisitos de cada al2oritmo' funcionalidad' alcance' etc.

Generalidades

Qué es un algoritmo

Qué es un vector

Tipos de algoritmos de ordenamiento Para poder ordenar una cantidad determinada de nmeros almacenados en un vector o matriz' eisten distintos m1todos al2oritmos! con distintas caracter&sticas y comple:idad. Eiste desde el m1todo más simple' como el Gubblesort o M1todo Gurbu:a!' que son simples iteraciones' hasta el Quic5sort M1todo Rápido!' que al estar optimizado usando recursi-n' su tiempo de e:ecuci-n es menor y es más efectivo.

Algoritmos basados en métodos iterativos: Estos m1todos son simples de entender y de pro2ramar ya que son iterativos' simples ciclos y sentencias que hacen que el vector pueda ser ordenado. 9entro de los 4l2oritmos iterativos encontramos"    

Gurbu:a ,nserci-n 8elecci-n 8hellsort

Algoritmos basados en métodos recursivos Estos m1todos son an más comple:os' requieren de mayor atenci-n y conocimiento para ser entendidos. 8on rápidos y efectivos' utilizan 2eneralmente la t1cnica H9ivide y VencerásI' que consiste en dividir un problema 2rande en varios pequeJos para que sea más fácil resolverlos. Mediante llamadas recursivas a s& mismos' es posible que el tiempo de e:ecuci-n y de ordenaci-n sea más -ptimo. 9entro de los al2oritmos recursivos encontramos"  

6rdenamiento por Mezclas mer2e! 6rdenamiento Rápido quic5!

Método Quicksort (Ordenamiento !pido" Es el al2oritmo de ordenamiento más eficiente de todos' se basa en la t1cnica de K9ivide y VencerásK' que permite en promedio' ordenar n elementos en un tiempo proporcional a nLlo2n!.

Algoritmo #undamental  





Ele2ir un elemento de la lista de elementos a ordenar' al que llamaremos pivote. Resituar los demás elementos de la lista a cada lado del pivote' de manera que a un lado queden todos los menores que 1l' y al otro los mayores. Aos elementos i2uales al pivote pueden ser colocados tanto a su derecha como a su izquierda' dependiendo de la implementaci-n deseada. En este momento' el pivote ocupa eactamente el lu2ar que le corresponderá en la lista ordenada. Aa lista queda separada en dos sublistas' una formada por los elementos a la izquierda del pivote' y otra por los elementos a su derecha. Repetir este proceso de forma recursiva para cada sublista mientras 1stas conten2an más de un elemento. $na vez terminado este proceso todos los elementos estarán ordenados.

El m1todo Quic5sort basa su estrate2ia en la idea intuitiva de que es más fácil ordenar una 2ran estructura de datos subdividi1ndolas en otras más pequeJas introduciendo un orden relativo entre ellas. En otras palabras' si dividimos el arre2lo a ordenar en dos subarre2los de forma que los elementos del subarre2lo inferior sean más pequeJos que los del subarre2lo superior' y aplicamos el m1todo reiteradamente' al final tendremos el arre2lo inicial totalmente ordenado. Eisten además otros m1todos conocidos' el de ordenaci-n por mont&culo y el de shell.

Caracter$sticas del algoritmo Quick%ort 















El al2oritmo Quic5sort fue desarrollado en *@;( por 8ir Charles 4ntony Richard oare C. 4. R. oare!' antes de que se implementaran los primeros len2ua:es con capacidad para e:ecutar funciones recursivas. El ordenamiento por partici-n Quic5 8ort! se puede definir en una forma más conveniente como un procedimiento recursivo. 3iene aparentemente la propiedad de traba:ar me:or para elementos de entrada desordenados completamente' que para elementos semiordenados. Esta situaci-n es precisamente la opuesta al ordenamiento de burbu:a. Este tipo de al2oritmos se basa en la t1cnica Kdivide y vencerásK' o sea es más rápido y fácil ordenar dos arre2los o listas de datos pequeJos' que un arre2lo o lista 2rande. Bormalmente al inicio de la ordenaci-n se esco2e un elemento aproimadamente en la mitad del arre2lo' as& al empezar a ordenar' se debe lle2ar a que el arre2lo este ordenado respecto al punto de divisi-n o la mitad del arre2lo. 8e podrá 2arantizar que los elementos a la izquierda de la mitad son los menores y los elementos a la derecha son los mayores. Aos si2uientes pasos son llamados recursivos con el prop-sito de efectuar la ordenaci-n por partici-n al arre2lo izquierdo y al arre2lo derecho' que se obtienen de la primera fase. El tamaJo de esos arre2los en promedio se reduce a la mitad. 4s& se contina hasta que el tamaJo de los arre2los a ordenar es *' es decir' todos los elementos ya están ordenados.



En promedio para todos los elementos de entrada de tamaJo n' el m1todo hace 6n lo2 n! comparaciones' el cual es relativamente eficiente.

&l algoritmo es el siguiente:

Inicio variables A: arreglo[1..100 entero variables i!"!central:entero variables #rimero! ultimo: entero #ara i $ 1 %asta 100 leer&A[i' (in #ara #rimero $ 1 ultimo $ 100 )sort&A[!100' (in (uncion )sort&#rimero! ultimo:entero' i $ #rimero  " $ ultimo central $ A[&#rimero!ultimo' div * re#etir mientras A[icentral  " $ " + 1 ,n mientras si i - $ " au $ A[i A[" $ A[i A[i $ au i$i/1  " $ " + 1 ,n si %asta )ue i  " si #rimero - " #artir&#rimero!"' ,n si si i - ultimo #artir&i! ultimo' ,n si ,n uncion )sort

'iagrama de #luo ordenamiento r!pido

'escripción del algoritmo Ele2ir un elemento de la lista de elementos a ordenar' al que llamaremos pivote. Aa idea central de este al2oritmo consiste en lo si2uiente"  









8e toma un elemento  de una posici-n cualquiera del arre2lo. 8e trata de ubicar a  en la posici-n correcta del arre2lo' de tal forma que todos los elementos que se encuentran a su izquierda sean menores o i2uales a  y todos los elementos que se encuentren a su derecha sean mayores o i2uales a . 8e repiten los pasos anteriores pero ahora para los con:untos de datos que se encuentran a la izquierda y a la derecha de la posici-n correcta de  en el arre2lo. Resituar los demás elementos de la lista a cada lado del pivote' de manera que a un lado queden todos los menores que 1l' y al otro los mayores. En este momento' el pivote ocupa eactamente el lu2ar que le corresponderá en la lista ordenada. Repetir este proceso de forma recursiva para cada sublista mientras 1stas conten2an más de un elemento. $na vez terminado este proceso todos los elementos estarán ordenados. Como se puede suponer' la eficiencia del al2oritmo depende de la posici-n en la que termine el pivote ele2ido.

)Cómo elegimos el pivote* M1todo *" Ao ideal ser&a que el pivote fuera la mediana del vector para que las partes izquierda y derecha tuvieran el mismo tamaJo. M1todo (" recorremos el vector con un &ndice i desde ) a nD*' y otro &ndice : inversamente y cuando se crucen' es decir' ten2a el mismo valor' ese se seleccionara como pivote. M1todo 0" Ele2ir el valor de la primera posici-n del vector o la ltima M1todo 7" Ele2ir un valor en una posici-n aleatoria del vector En esta fi2ura se ilustra de me:or manera un vector con más elementos' usando como pivote el primer elemento"

An!lisis del algoritmo

Estabilidad" Bo es estable. Requerimientos de memoria" Bo requiere memoria adicional en su forma recursiva. En su forma iterativa la necesita para la pila. Venta:as" Muy rápido. Bo requiere memoria adicional.  

9esventa:as" ,mplementaci-n un poco más complicada. Recursividad utiliza muchos recursos!. Mucha diferencia entre el peor y el me:or caso.   

Compleidad computacional del Quicksort En el me:or de los casos tiene un costo de 6nLlo2 n!!. Que es cuando el pivote siempre queda al medio del arre2lo.

En el caso promedio tambi1n tiene un costo de 6nLlo2 n!!. 8e produce cuando el pivote se inclina más hacia un lado y los ( subarre2los tienen distinto tamaJo de elementos.

En el peor de los casos tiene un costo de 6nN(!. Cuando el pivote siempre se inclina hacia a un lado' es decir' 2enera un arre2lo de s-lo * elemento y una se2unda con el resto de elementos.

Para calcular el tiempo de e:ecuci-n se us- la funci-n cloc5! que determina el tiempo usado por el procesador. En este caso defino 0 variables ini' final y total. * ( 0 7 +

iniOcloc5!  4ntes del quic5sort" final O cloc5! 9espu1s que se e:ecuta el qu ic5sort total Odouble!final  ini!!  CA6CS8TPERT8EC  El valor retornado por cloc5! debe ser dividido por el valor de la macro CA6CS8TPERT8EC

Cada al2oritmo de ordenamiento por definici-n tiene operaciones y cálculos m&nimos y máimos que realiza comple:idad!' a continuaci-n una tabla que indica la cantidad de cálculos que corresponden a cada m1todo de ordenamiento"

4l2oritmo

Gurbu:a ,nserci-n 8elecci-n 8hell Mer2e Quic5 Rápido!

6peraciones máimas

Un! Un7! Un! Un lo2n! Un lo2n! Un! en peor de los casos y Un lo2n! en el promedio de los casos.

Comparación de tiempos 8e han ordenado una cantidad determinada de elementos aleatorios en una lista mediante distintos m1todos de ordenamiento en se2undos!.

(+; elementos

+*( elementos

Gurbu:a" ).))7) 8elecci-n" ).))0) ,nserci-n" ).))7) Rápido" ).))*) 8hell" ).))*) Mer2e" ).))7)

()7? elementos

Gurbu:a" ).)(( 8elecci-n" ).)*+ ,nserci-n" ).)*0 Rápido" ).))*) 8hell" ).));) Mer2e" ).))+)

Gurbu:a" ).))+) 8elecci-n" ).))7) ,nserci-n" ).))+) Rápido" ).))*) 8hell" ).))() Mer2e" ).))0

*;0?7 elementos

Gurbu:a" *.)++ 8elecci-n" )[email protected] ,nserci-n" ).+ @. cont $ 1> 10. i &i - "' 11. tem# $ lista[i> 1*. lista[i $ lista["> 1?. lista[" $ tem#> [email protected] else 1. cont $ 0>

1E. lista[su# $ tem#>

Bota" Aa primera llamada deber&a ser con la lista' cero )! y el tamaJo de la lista menos * como parámetros.

,n eemplo Esta vez voy a cambiar de lista +D0D G Insertion sort t%res%old! kk $ 1 G Quicksort n $ lengt%&'>  $ )uicksorti&!1!n!kk'> end unction  $ )uicksorti&!ll!uu!kk' G Sort &ll:uu' via )uick sort G 8ote: In #ractice!  %ould be #assed bH reerence G Select #ivot and #artition data around it [ mm $ #artition&!ll!uu'> G ivide+and+con)uer i &&mm + ll' -$ kk' G Sort &ll:&mm + 1'' via insertion sort  $ insertionsorti&!ll!mm + 1'> else G Sort &ll:&mm + 1'' via )uick sort  $ )uicksorti&!ll!mm + 1!kk'> end i &&uu + mm' -$ kk' G Sort &&mm / 1':uu' via insertion sort  $ insertionsorti&!mm / 1!uu'> else G Sort &&mm / 1':uu' via )uick sort  $ )uicksorti&!mm / 1!uu!kk'> end end unction [ mm $ #artition&!ll!uu' G 6artition &ll:uu' around inde mm G 8ote: In #ractice!  %ould be #assed bH reerence G++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ G Select #ivot G++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ G Met%od 1: Median+o+? #ivot ## $ medianot%ree&!ll!uu'> G Median+o+t%ree #ivot inde G Met%od *: 9andom #ivot G## $ randi&[ll uu'> G 9andom #ivot inde G++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ G 6artition around #ivot  $ sDa#&!ll!##'> mm $ ll> or " $ &ll / 1':uu i &&"' - &ll'' mm $ mm / 1>  $ sDa#&!mm!"'> end end  $ sDa#&!ll!mm'> end

unction ## $ medianot%ree&!ll!uu' G 2om#ute median o &ll'!&mm'!&uu'R G 8ote: In #ractice!  %ould be #assed bH reerence G Middle element &avoiding overoD' mm $ ll / oor&&uu + ll' < *'> G 2om#ute median o &ll'!&mm'!&uu'R i &&ll' -$ &mm'' i &&uu' $ &mm'' ## $ mm> elsei &&uu' $ &ll'' ## $ uu>   else ## $ ll> end else i &&uu' $ &ll'' ## $ ll> elsei &&uu' $ &mm'' ## $ uu>   else ## $ mm> end end end unction  $ insertionsorti&!ll!uu' G Sort &ll:uu' via insertion sort G 8ote: In #ractice!  %ould be #assed bH reerence G Insertion sort or " $ &ll / 1':uu #ivot $ &"'> i $ "> D%ile &&i  ll' TT &&i + 1'  #ivot'' &i' $ &i + 1'> i $ i + 1> end &i' $ #ivot> end end unction  $ sDa#&!i!"' G SDa# &i' and &"' G 8ote: In #ractice!  %ould be #assed bH reerence val $ &i'> &i' $ &"'> &"' $ val> end

&emplo 1:

Script:

A $ [? B *  1 C @> rig%tInde $ lengt%&A'> 4 $ QuickSort&A!1!rig%tInde'> QuickSort:

unction [#vt!  $ QuickSort&A!let!rig%t' i  let - rig%t [! #vt $ 6artn6ivot1&A! let! rig%t'> Gc%osen #ivot QuickSort&! let! #vt+1'> QuickSort&! #vt/1! rig%t'> end Partition:

unction [sortedSubArraH! #ivot $ 6artn6ivot1&subArraH!letInde!rig%tInde' GG Initiali7ations S $ subArraH> let $ letInde> rig%t $ rig%tInde> 6 $ S&let'> G#ivot i $ let/1> GG 6artition or " $ i:rig%t i S&"' - 6 tem#1 $ S&"'> G tem#* $ S&i'> G sDa# S&i' Dit% S&"' S&"' $ tem#*> G S&i' $ tem#1> G i $ i/1> Gincrement i onlH D%en sDa# occurs end end sDa#1 $ S&let'> G sDa#* $ S&i+1'> G ,nal sDa# S&let' $ sDa#*> G S&i+1' $ sDa#1> G sortedSubArraH $ S> #ivot $ 6>

&emplo 0:

unction [H$)uicksort&' G Uses )uicksort to sort an arraH. JDo dimensional arraHs are sorted column+Dise. [n!m$si7e&'> i&m1' H$> or "$1:m H&:!"'$)uicksort&&:!"''> end return> end G J%e trivial cases i&n-$1'>H$>return>end> i&n$$*' i&&1'&*'' $[&*'> &1'> end H$> return> end G J%e non+trivial case G (ind a #ivot! and divide t%e arraH into tDo #arts. G All elements o t%e ,rst #art are less t%an t%e G #ivot! and t%e elements o t%e ot%er #art are greater G t%an or e)ual to t%e #ivot. m$,&n ltIndices$,nd&-#ivot'> G Indices o all elements less t%an #ivot. i&isem#tH<Indices'' G J%is %a##ens D%en #ivot is miniumum o all elements. ind$,nd&#ivot'> G (ind t%e indices o elements greater t%an #ivot. i&isem#tH&ind''>H$ >return>end> G J%is %a##ens D%en all elements are t%e same. #ivot$&ind&1''> G Use neD #ivot. ltIndices$,nd&-#ivot'> end G 8oD ,nd t%e indices o all elements not less t%an #ivot. G Since t%e #ivot is an element o t%e arraH! G geIndices cannot be em#tH. geIndices$,nd&$#ivot'> G 9ecursivelH sort t%e tDo #arts o t%e arraH and concatenate G t%e sorted #arts. H$ [)uicksort&<Indices''>)uicksort&&geIndices''>

e#erencias

'ocumentación: 4l2oritmos de ordenaci-n. 4le:andro 4lcalde. Recuperado de http"elbauldelpro2ramador.comal2oritmosDdeDordenacion 4l2oritmo Quic5sort. avier Vilu2r-n. Recuperado de https":aviervilu2ron2.Zordpress.comal2oritmoDquic5sort 4l2oritmo M1todo Quic5sort. Patricia Correa. Recuperado de http"es.slideshare.netPatriciaCorrea;al2oritmoDmetodoDquic5sort Aos 0 m1todos de ordenamiento más populares. Recuperado de http"2lDepnDpro2ramacionDii.blo2spot.com()*));metodosDdeDordenamiento.html Mis 4l2oritmos. 6rdenamiento Rápido Quic5sort!. Recuperado de http"misDal2oritmos.comordenamientoDrapidoDquic5sort 6rdenamiento de vectores. ,n2eniero B1stor 9&az Fiet  $nicauca. ())+. Recuperado de http"artemisa.unicauca.edu.co[nediazE99,cap)0.htm

4ideos: Quic5sort. Recuperado de http"ZZZ.neoteo.comquic5sortDal2oritmoDdeDordenamientoDrapido Quic5Dsort Zith un2arian S\5\ll]menti le21nyes! fol5 dance. Recuperado de https"youtu.beyZ^Gy;+2z? M1todo de 6rdenamiento Quic5sort. Recuperado de https"youtu.be3tG#8tCf5 6rdenamiento Quic5sort. Cristian Var2as. Recuperado de https"youtu.be5qm#8DADAG2 Visualization of Quic5 8ort. Recuperado de https"youtu.bevEBSlcs(3Z Visualization of Quic5 sort 9!. Recuperado de https"youtu.bea##^#z+rF;7

&emplo Matlab: http"ZZZ.mathZor5s.commatlabcentralfileechan2e7+*(+Dsortin2D methodscontent8ortin2_()Methodsquic5sort.m http"stac5overfloZ.comquestions*+)7
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF