Vielleicht ist der Algorithmus selbst nicht so dunkel, aber wer kann eine Implementierung nennen, die tatsächlich in der Praxis verwendet wird? Ich kann!
TIGCC (ein GCC-basierter Compiler für TI-89/92 / V200-Grafikrechner) verwendet die Shell-Sortierung für die qsort
Implementierung in seiner Standardbibliothek:
__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;
}
}
}
Shell-Sortierung wurde zugunsten von QuickSort gewählt, um die Codegröße niedrig zu halten. Obwohl die asymptotische Komplexität schlechter ist, verfügt der TI-89 nicht über viel RAM (190 KB, abzüglich der Programmgröße und der Gesamtgröße aller nicht archivierten Variablen), sodass davon auszugehen ist, dass die Anzahl der Elemente größer ist niedrig sein.
Eine schnellere Implementierung wurde geschrieben, nachdem ich mich darüber beschwert hatte, dass es in einem Programm, das ich schrieb, zu langsam sei. Es werden bessere Spaltgrößen sowie Optimierungen der Baugruppe verwendet. Es kann hier gefunden werden: qsort.c