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