Mungkin algoritme itu sendiri tidak begitu jelas, tetapi siapa yang dapat menyebutkan implementasi yang sebenarnya digunakan dalam praktik? Saya bisa!
TIGCC (kompiler berbasis GCC untuk kalkulator grafik TI-89/92 / V200) menggunakan Shell sort untuk qsort
implementasi di pustaka standarnya:
__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 sort dipilih untuk quicksort agar ukuran kode tetap rendah. Meskipun kompleksitas asimptotiknya lebih buruk, TI-89 tidak memiliki banyak RAM (190K, minus ukuran program dan ukuran total dari setiap variabel yang tidak diarsipkan), jadi agak aman untuk mengasumsikan bahwa jumlah item akan rendah.
Implementasi yang lebih cepat ditulis setelah saya mengeluh karena terlalu lambat dalam program yang saya tulis. Ia menggunakan ukuran celah yang lebih baik, bersama dengan optimisasi perakitan. Itu dapat ditemukan di sini: qsort.c