1*11a8fa6cSceastha /* 2*11a8fa6cSceastha * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 3*11a8fa6cSceastha * Use is subject to license terms. 4*11a8fa6cSceastha */ 5*11a8fa6cSceastha 67c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 77c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 87c478bd9Sstevel@tonic-gate 97c478bd9Sstevel@tonic-gate /* 107c478bd9Sstevel@tonic-gate * Copyright (c) 1980 Regents of the University of California. 117c478bd9Sstevel@tonic-gate * All rights reserved. The Berkeley software License Agreement 127c478bd9Sstevel@tonic-gate * specifies the terms and conditions for redistribution. 137c478bd9Sstevel@tonic-gate */ 147c478bd9Sstevel@tonic-gate 157c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 167c478bd9Sstevel@tonic-gate 177c478bd9Sstevel@tonic-gate /* 187c478bd9Sstevel@tonic-gate * SORTS UP. 197c478bd9Sstevel@tonic-gate * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP 207c478bd9Sstevel@tonic-gate * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP 217c478bd9Sstevel@tonic-gate */ 22*11a8fa6cSceastha void 23*11a8fa6cSceastha shell(int n, int (*comp)(), int (*exch)()) 247c478bd9Sstevel@tonic-gate { 257c478bd9Sstevel@tonic-gate int igap, iplusg, iex, i, imax; 267c478bd9Sstevel@tonic-gate igap = n; 27*11a8fa6cSceastha while (igap > 1) { 287c478bd9Sstevel@tonic-gate igap /= 2; 297c478bd9Sstevel@tonic-gate imax = n-igap; 30*11a8fa6cSceastha do { 317c478bd9Sstevel@tonic-gate iex = 0; 32*11a8fa6cSceastha for (i = 0; i < imax; i++) { 337c478bd9Sstevel@tonic-gate iplusg = i + igap; 347c478bd9Sstevel@tonic-gate if ((*comp)(i, iplusg)) continue; 357c478bd9Sstevel@tonic-gate (*exch) (i, iplusg); 367c478bd9Sstevel@tonic-gate iex = 1; 377c478bd9Sstevel@tonic-gate } 387c478bd9Sstevel@tonic-gate } 39*11a8fa6cSceastha while (iex > 0) 40*11a8fa6cSceastha ; 417c478bd9Sstevel@tonic-gate } 427c478bd9Sstevel@tonic-gate } 43