xref: /csrg-svn/old/refer/hunt/shell.c (revision 12302)
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