/*- * This module is believed to contain source code proprietary to AT&T. * Use and redistribution is subject to the Berkeley Software License * Agreement and your Software Agreement with AT&T (Western Electric). */ #ifndef lint static char sccsid[] = "@(#)shell.c 4.2 (Berkeley) 4/18/91"; #endif /* not lint */ /* * SORTS UP. * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP */ shell (n, comp, exch) int (*comp)(), (*exch)(); { int igap, iplusg, iex, i, imax; igap=n; while (igap > 1) { igap /= 2; imax = n-igap; do { iex=0; for(i=0; i<imax; i++) { iplusg = i + igap; if ((*comp) (i, iplusg) ) continue; (*exch) (i, iplusg); iex=1; } } while (iex>0); } }