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*35192Smarcvoid 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