xref: /original-bsd/old/refer/hunt/shell.c (revision 42c7e7a1)
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