Quicksort La implementación es claramente recursiva y suponiendo el pivote el primer elemento del array, el programa sería: #include<stdio.h> void ordenar(int *,int,int); void main() { // Dar valores al array ordenar(array,0,N-1); // Para llamar a la función } void ordenar(int *array,int desde,int hasta) { int i,d,aux; // i realiza la búsqueda de izquierda a derecha // y j realiza la búsqueda de derecha a izquierda. if(desde>=hasta) return; for(i=desde+1,d=hasta;;) // Valores iniciales de la búsqueda. { for(;i<=hasta && array<=*(array+desde);i++); // Primera búsqueda for(;d>=0 && *(array+d)>=*(array+desde);d--); // segunda búsqueda if(i<d) // si no se han cruzado: { aux=*(array+i); // Intercambiar. *(array+i)=*(array+d); *(array+d)=aux; } else // si se han cruzado: break; // salir del bucle. } if(d==desde-1) // Si la segunda búsqueda se sale del array d=desde; // es que el pivote es el elemento // más pequeño: se cambia con él mismo. aux=*(array+d); // Colocar el pivote *(array+d)=*(array+desde); // en su posición. *(array+desde)=aux; ordenar(array,desde,d-1); // Ordenar el primer array. ordenar(array,d+1,hasta); // Ordenar el segundo array. }