1*35192Smarc /*
2*35192Smarc 
3*35192Smarc  *      Copyright (c) 1984, 1985, 1986 AT&T
4*35192Smarc  *      All Rights Reserved
5*35192Smarc 
6*35192Smarc  *      THIS IS UNPUBLISHED PROPRIETARY SOURCE
7*35192Smarc  *      CODE OF AT&T.
8*35192Smarc  *      The copyright notice above does not
9*35192Smarc  *      evidence any actual or intended
10*35192Smarc  *      publication of such source code.
11*35192Smarc 
12*35192Smarc  */
13*35192Smarc 
14*35192Smarc /* @(#)gsort.c	1.1 */
15*35192Smarc 
16*35192Smarc /*
17*35192Smarc  *  gsort - sort an array of strings
18*35192Smarc  *
19*35192Smarc  *   David Korn
20*35192Smarc  *   AT&T Bell Laboratories
21*35192Smarc  *   Room 5D-112
22*35192Smarc  *   Murray Hill, N. J. 07974
23*35192Smarc  *   Tel. x7975
24*35192Smarc  *
25*35192Smarc  *  Derived from Bourne Shell
26*35192Smarc  */
27*35192Smarc 
28*35192Smarc extern int strcmp();
29*35192Smarc 
30*35192Smarc /*
31*35192Smarc  * sort the array of strings argv with n elements
32*35192Smarc  */
33*35192Smarc 
gsort(argv,n)34*35192Smarc void	gsort(argv,n)
35*35192Smarc char *argv[];
36*35192Smarc {
37*35192Smarc 	register int 	i, j, m;
38*35192Smarc 	int  k;
39*35192Smarc 	for(j=1; j<=n; j*=2);
40*35192Smarc 	for(m=2*j-1; m/=2;)
41*35192Smarc 	{
42*35192Smarc 		k=n-m;
43*35192Smarc 		for(j=0; j<k; j++)
44*35192Smarc 		{
45*35192Smarc 			for(i=j; i>=0; i-=m)
46*35192Smarc 			{
47*35192Smarc 				register char **ap;
48*35192Smarc 				ap = &argv[i];
49*35192Smarc 				if(strcmp(ap[m],ap[0])>0)
50*35192Smarc 					break;
51*35192Smarc 				else
52*35192Smarc 				{
53*35192Smarc 					char *s;
54*35192Smarc 					s=ap[m];
55*35192Smarc 					ap[m]=ap[0];
56*35192Smarc 					ap[0]=s;
57*35192Smarc 				}
58*35192Smarc 			}
59*35192Smarc 		}
60*35192Smarc 	}
61*35192Smarc }
62*35192Smarc 
63