/* * @(#)CombSort11Algorithm.java 1.0 96/11/20 Jason Harrison * * Copyright (c) 1995 University of British Columbia * * Permission to use, copy, modify, and distribute this software * and its documentation for NON-COMMERCIAL purposes and without * fee is hereby granted provided that this copyright notice * appears in all copies. Please refer to the file "copyright.html" * for further important copyright and licensing information. * * UBC MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UBC SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. */ /** * A comb sort 11 sort demonstration algorithm * Idea from Byte April 1991 by Richard Box and Stephen Lacey * Michele Estebon (mestebon@vt.edu) brought this to my attention. * * SortAlgorithm.java, Thu Oct 27 10:32:35 1994 * * @author Jason Harrison@cs.ubc.ca * @version 1.0, 20 Nov 1996 * */ class CombSort11Algorithm extends SortAlgorithm { final float SHRINKFACTOR = (float)1.3; void sort(int a[]) throws Exception { boolean flipped = false; int gap, top; int i, j; gap = a.length; do { gap = (int) ((float) gap / SHRINKFACTOR); switch (gap) { case 0: /* the smallest gap is 1 - bubble sort */ gap = 1; break; case 9: /* this is what makes this Combsort11 */ case 10: gap = 11; break; default: break; } flipped = false; top = a.length - gap; for (i = 0; i < top; i++) { if (stopRequested) { return; } j = i + gap; if (a[i] > a[j]) { int T = a[i]; a[i] = a[j]; a[j] = T; flipped = true; } pause(i,j); } } while (flipped || (gap > 1)); /* like the bubble and shell sorts we check for a clean pass */ } }