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