diff options
Diffstat (limited to 'refer/shell.c')
-rw-r--r-- | refer/shell.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/refer/shell.c b/refer/shell.c new file mode 100644 index 0000000000000..3dbc9f41aa988 --- /dev/null +++ b/refer/shell.c @@ -0,0 +1,51 @@ +/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + + +/* + * Copyright (c) 1980 Regents of the University of California. + * All rights reserved. The Berkeley software License Agreement + * specifies the terms and conditions for redistribution. + */ + +/* + * Copyright (c) 1983, 1984 1985, 1986, 1987, 1988, Sun Microsystems, Inc. + * All Rights Reserved. + */ + +/* from OpenSolaris "shell.c 1.3 05/06/02 SMI" */ + +/* + * Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany + * + * Sccsid @(#)shell.c 1.4 (gritter) 12/25/06 + */ + +/* + * SORTS UP. + * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP + * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP + */ +void +shell (int n, int (*comp)(int, int), int (*exch)(int, int)) +{ + int igap, iplusg, iex, i, imax; + igap=n; + while (igap > 1) + { + igap /= 2; + imax = n-igap; + do + { + iex=0; + for(i=0; i<imax; i++) + { + iplusg = i + igap; + if ((*comp) (i, iplusg) ) continue; + (*exch) (i, iplusg); + iex=1; + } + } + while (iex>0); + } +} |