32 lines
554 B
C
32 lines
554 B
C
#ifndef lint
|
|
static char sccsid[] = "@(#)shell.c 1.1 94/10/31 SMI"; /* from UCB 4.1 5/6/83 */
|
|
#endif
|
|
/*
|
|
* 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);
|
|
}
|
|
}
|