2
Lo más leído
4
Lo más leído
7
Lo más leído
Jorge VillarrealMateria: Algoritmos ComputacionalesMatricula:1497195Algoritmo de Quicksort
ProblemaComo hacer para ordenar una cadena de datos aleatorios?Con un algoritmo de ordenamiento es fácil hacer esto, existen varios métodos para ordenar una cadena.Entre estos métodos está el quicksort.
ExplicaciónEl ordenamiento rápido (Quick Sort) hace una partición agarra a un elemento para hacer una partición y los elementos menores a este se mueven a una posición anterior y los mayores a una posición mas adelante.Este método es : Recursivo
propiedadesInestableO(lg(n)) O(n2) tiempo o sino O(n·lg(n)) tNo se adapta
Pseudocodigoint colocar(int *v, int b, int t) {inti;int pivote, valor_pivote;inttemp;pivote = b; valor_pivote= v[pivote];for (i=b+1; i<=t; i++){if (v[i] < valor_pivote){pivote++; temp=v[i]; v[i]=v[pivote]; v[pivote]=temp;} } temp=v[b];v[b]=v[pivote];v[pivote]=temp; returnpivote; } voidQuicksort(int* v, int b, int t) {int pivote;if(b < t){pivote=colocar(v, b, t); Quicksort(v, b, pivote-1); Quicksort(v, pivote+1, t);} }
Ejemplo5 - 3 - 7 - 6 - 2 - 1 - 4Comenzamos con la lista completa. El elemento divisor será el 4:5 - 3 - 7 - 6 - 2 - 1 - 4Comparamos con el 5 por la izquierda y el 1 por la derecha.5 - 3 - 7 - 6 - 2 - 1 - 45 es mayor que cuatro y 1 es menor. Intercambiamos:1 - 3 - 7 - 6 - 2 - 5 - 4Avanzamos por la izquierda y la derecha:1 - 3 - 7 - 6 - 2 - 5 - 4primera llamada se tiene el arreglo ordenado:1 - 2 - 3 - 4 - 5 - 6 - 7
3 es menor que 4: avanzamos por la izquierda. 2 es menor que 4: nos mantenemos ahí.1 - 3 - 7 - 6 - 2 - 5 - 47 es mayor que 4 y 2 es menor: intercambiamos.1 - 3 - 2 - 6 - 7 - 5 - 4Avanzamos por ambos lados:1 - 3 - 2 - 6 - 7 - 5 - 4En este momento termina el ciclo principal, porque los índices se cruzaron. Ahora intercambiamos lista[i] con lista[sup] (pasos 16-18):1 - 3 - 2 - 4 - 7 - 5 - 6Aplicamos recursivamente a la sublista de la izquierda (índices 0 - 2). Tenemos lo siguiente:1 - 3 - 2
1 es menor que 2: avanzamos por la izquierda. 3 es mayor: avanzamos por la derecha. Como se intercambiaron los índices termina el ciclo. Se intercambia lista[i] con lista[sup]:1 - 2 - 3Al llamar recursivamente para cada nueva sublista (lista[0]-lista[0] y lista[2]-lista[2]) se retorna sin hacer cambios (condición 5.).Para resumir te muestro cómo va quedando la lista:Segunda sublista: lista[4]-lista[6]7 - 5 - 65 - 7 - 65 - 6 - 7Para cada nueva sublista se retorna sin hacer cambios (se cruzan los índices).Finalmente, al retornar de la primera llamada se tiene el arreglo ordenado:1 - 2 - 3 - 4 - 5 - 6 – 7Visto en:http://c.conclase.net/orden/?cap=quicksort
GraficadoAquí se demuestra el rendimiento de quicksort en su mejor y peor caso.Mejor caso : nlognPeor caso: n^2
bibliografiahttp://es.wikipedia.org/wiki/Quicksorthttp://www.neoteo.com/quicksort-algoritmo-de-ordenamiento-rapidohttp://www.psicofxp.com/forums/programacion.313/896136-quick-sort-en-c.htmlhttp://www.sorting-algorithms.com/quick-sorthttp://c.conclase.net/orden/?cap=quicksorthttp://www.psicofxp.com/forums/programacion.313/896136-quick-sort-en-c.htmlhttp://www.lolcats.com/view/19564/

Algoritmo de quicksort