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.