Belki de algoritmanın kendisi bu kadar belirsiz değildir, fakat gerçekte pratikte kullanılan bir uygulamayı kim isimlendirir? Yapabilirim!
TIGCC (TI-89/92 / V200 grafik hesap makineleri için GCC tabanlı bir derleyici) qsort
standart kitaplığındaki uygulama için Shell sıralamasını kullanır :
__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;
}
}
}
Kabuk sıralaması, kod boyutunu düşük tutmak için hızlı bağlantı noktası lehine seçildi. Her ne kadar asimptotik karmaşıklık daha kötü olsa da, TI-89 çok fazla RAM'e sahip değildir (190K, eksi program boyutu ve arşivlenmemiş değişkenlerin toplam boyutu), bu nedenle öğe sayısının artacağını varsaymak biraz güvenlidir. altında.
Yazdığım bir programda çok yavaş olduğundan şikayet ettikten sonra daha hızlı bir uygulama yazıldı. Montaj optimizasyonları ile birlikte daha iyi boşluk boyutları kullanır. Burada bulunabilir: qsort.c