xref: /titanic_51/usr/src/cmd/refer/shell.c (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
2 /*	  All Rights Reserved  	*/
3 
4 
5 /*
6  * Copyright (c) 1980 Regents of the University of California.
7  * All rights reserved. The Berkeley software License Agreement
8  * specifies the terms and conditions for redistribution.
9  */
10 
11 /*
12  * Copyright (c) 1983, 1984 1985, 1986, 1987, 1988, Sun Microsystems, Inc.
13  * All Rights Reserved.
14  */
15 
16 #pragma ident	"%Z%%M%	%I%	%E% SMI"
17 
18 /*
19  * SORTS UP.
20  * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP
21  * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP
22  */
23 shell (n, comp, exch)
24 int (*comp)(), (*exch)();
25 {
26 	int igap, iplusg, iex, i, imax;
27 	igap=n;
28 	while (igap > 1)
29 	{
30 		igap /= 2;
31 		imax = n-igap;
32 		do
33 		    {
34 			iex=0;
35 			for(i=0; i<imax; i++)
36 			{
37 				iplusg = i + igap;
38 				if ((*comp) (i, iplusg) ) continue;
39 				(*exch) (i, iplusg);
40 				iex=1;
41 			}
42 		}
43 		while (iex>0);
44 	}
45 }
46