xref: /csrg-svn/old/refer/hunt/shell.c (revision 48296)
1*48296Sbostic /*-
2*48296Sbostic  * %sccs.include.proprietary.c%
3*48296Sbostic  */
4*48296Sbostic 
512302Stut #ifndef lint
6*48296Sbostic static char sccsid[] = "@(#)shell.c	4.2 (Berkeley) 04/18/91";
7*48296Sbostic #endif /* not lint */
8*48296Sbostic 
912302Stut /*
1012302Stut  * SORTS UP.
1112302Stut  * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP
1212302Stut  * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP
1312302Stut  */
1412302Stut shell (n, comp, exch)
1512302Stut int (*comp)(), (*exch)();
1612302Stut {
1712302Stut 	int igap, iplusg, iex, i, imax;
1812302Stut 	igap=n;
1912302Stut 	while (igap > 1)
2012302Stut 	{
2112302Stut 		igap /= 2;
2212302Stut 		imax = n-igap;
2312302Stut 		do
2412302Stut 		    {
2512302Stut 			iex=0;
2612302Stut 			for(i=0; i<imax; i++)
2712302Stut 			{
2812302Stut 				iplusg = i + igap;
2912302Stut 				if ((*comp) (i, iplusg) ) continue;
3012302Stut 				(*exch) (i, iplusg);
3112302Stut 				iex=1;
3212302Stut 			}
3312302Stut 		}
3412302Stut 		while (iex>0);
3512302Stut 	}
3612302Stut }
37