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