Quicksort (ordenamiento rpido)

Anuncio
Quicksort (ordenamiento rápido)
Introducción a la Programación
iT²: eCB (unidad V)
Traducción de la Sección 8.1 Descripción de quicksort en [CLR90, 153-154] (Rev. 2, 25.nov.2005; con ajustes en azul)
Quicksort,... está basado en el paradigma de diseño divide-y-vencerás. Se presenta aquí el proceso de
tres pasos para ordenar un subarreglo típico A[p..r]
Divide: El arreglo A[p..r] se particiona (reordena) en dos subarreglos no-vacíos A[p..q] y A[q+1..r] de
forma que cada elemento de A[p..q] sea menor o igual que cada elemento de A[q+1..r]. El índice q se
calcula como parte del proceso de partición.
Conquista: Los dos subarreglos A[p..q] y A[q+1..r] se ordenan con una llamada recursiva a quicksort.
Combina: Ya que los subarreglos se reordenan in-situ , no se requiere trabajo adicional para
combinarlos: el arreglo completo A[p..r] está ya ordenado.
El siguiente procedimiento implementa quicksort:
quicksort(A,p,r)
1
si p<r
2
entonces
3
4
q ← particion(A,P,r)
quicksort(A,p,q)
quicksort(A,q+1,r)
Para ordenar el arreglo A completo, la llamada inicial es quicksort(A,1,longitud[A]).
Partición del arreglo
La clave del algoritmo es el procedimiento particion, el cual reordena el subarreglo A[p..r] in-situ.
particion(A,p,r)
1
x ← A[p]
2
i ← p - 1
3
j ← r + 1
3’
listo ← falso
4
while not listo
5
do
repeat j ← j – 1
6
until A[j]<=x
7
repeat i ← i + 1
8
until A[i]>=x
9
if i < j
10
entonces intercambia A[i] con A[j]
11
en otro caso listo ← verdadero
11’
entrega j
Mucho éxito en su implementación en Scheme
(pueden usar la rev. 1.2 de macrosei.scm)
(atte. eCB)
[CLR90]. Cormen, Thomas R, Charles E. Leiserson y Ronald L. Rivest. Introduction to Algorithms. MIT Press, 1990.
Descargar