# Comb Sort Algorithm

/*
* @(#)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
* 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 */
}
}

1374
0
0