Tal vez el algoritmo en sí no sea tan oscuro, pero ¿quién puede nombrar una implementación que realmente se usa en la práctica? ¡Yo puedo!
TIGCC (un compilador basado en GCC para calculadoras gráficas TI-89/92 / V200) usa el ordenamiento Shell para la qsort
implementación en su biblioteca estándar:
__ATTR_LIB_C__ void qsort(void *list, short num_items, short size, compare_t cmp_func)
{
unsigned short gap,byte_gap,i,j;
char *p,*a,*b,temp;
for (gap=((unsigned short)num_items)>>1; gap>0; gap>>=1) // Yes, this is not a quicksort,
{ // but works fast enough...
byte_gap=gap*(unsigned short)size;
for(i=byte_gap; i<((unsigned short)num_items)*(unsigned short)size; i+=size)
for(p=(char*)list+i-byte_gap; p>=(char*)list; p-= byte_gap)
{
a=p; b=p+byte_gap;
if(cmp_func(a,b)<=0) break;
for(j=size;j;j--)
temp=*a, *a++=*b, *b++=temp;
}
}
}
Se seleccionó la ordenación de shell a favor de quicksort para mantener bajo el tamaño del código. Aunque su complejidad asintótica es peor, la TI-89 no tiene mucha RAM (190K, menos el tamaño del programa y el tamaño total de las variables no archivadas), por lo que es algo seguro asumir que la cantidad de elementos estar bajo
Se escribió una implementación más rápida después de que me quejé de que era demasiado lenta en un programa que estaba escribiendo. Utiliza mejores tamaños de espacio, junto con optimizaciones de ensamblaje. Se puede encontrar aquí: qsort.c