1*48296Sbostic /*- 2*48296Sbostic * %sccs.include.proprietary.c% 3*48296Sbostic */ 4*48296Sbostic 512302Stut #ifndef lint 6*48296Sbostic static char sccsid[] = "@(#)shell.c 4.2 (Berkeley) 04/18/91"; 7*48296Sbostic #endif /* not lint */ 8*48296Sbostic 912302Stut /* 1012302Stut * SORTS UP. 1112302Stut * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP 1212302Stut * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP 1312302Stut */ 1412302Stut shell (n, comp, exch) 1512302Stut int (*comp)(), (*exch)(); 1612302Stut { 1712302Stut int igap, iplusg, iex, i, imax; 1812302Stut igap=n; 1912302Stut while (igap > 1) 2012302Stut { 2112302Stut igap /= 2; 2212302Stut imax = n-igap; 2312302Stut do 2412302Stut { 2512302Stut iex=0; 2612302Stut for(i=0; i<imax; i++) 2712302Stut { 2812302Stut iplusg = i + igap; 2912302Stut if ((*comp) (i, iplusg) ) continue; 3012302Stut (*exch) (i, iplusg); 3112302Stut iex=1; 3212302Stut } 3312302Stut } 3412302Stut while (iex>0); 3512302Stut } 3612302Stut } 37