1*12302Stut #ifndef lint 2*12302Stut static char *sccsid = "@(#)shell.c 4.1 (Berkeley) 05/06/83"; 3*12302Stut #endif 4*12302Stut /* 5*12302Stut * SORTS UP. 6*12302Stut * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP 7*12302Stut * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP 8*12302Stut */ 9*12302Stut shell (n, comp, exch) 10*12302Stut int (*comp)(), (*exch)(); 11*12302Stut { 12*12302Stut int igap, iplusg, iex, i, imax; 13*12302Stut igap=n; 14*12302Stut while (igap > 1) 15*12302Stut { 16*12302Stut igap /= 2; 17*12302Stut imax = n-igap; 18*12302Stut do 19*12302Stut { 20*12302Stut iex=0; 21*12302Stut for(i=0; i<imax; i++) 22*12302Stut { 23*12302Stut iplusg = i + igap; 24*12302Stut if ((*comp) (i, iplusg) ) continue; 25*12302Stut (*exch) (i, iplusg); 26*12302Stut iex=1; 27*12302Stut } 28*12302Stut } 29*12302Stut while (iex>0); 30*12302Stut } 31*12302Stut } 32