home *** CD-ROM | disk | FTP | other *** search
/ Computer Life: Multimedia Mega Pac / Multimedia_Mega-Pac_Computer_Life_1996.iso / hotjava / demo / classes / bidirect.jav < prev    next >
Text File  |  1995-05-19  |  2KB  |  70 lines

  1. /*
  2.  * @(#)BidirectionalBubbleSortAlgorithm.java    1.6 95/01/31 James Gosling
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. /**
  21.  * A bi-directional bubble sort demonstration algorithm
  22.  * SortAlgorithm.java, Thu Oct 27 10:32:35 1994
  23.  *
  24.  * @author James Gosling
  25.  * @version     1.6, 31 Jan 1995
  26.  */
  27. class BidirectionalBubbleSortAlgorithm extends SortAlgorithm {
  28.     void sort(int a[]) {
  29.     int j;
  30.     int limit = a.length;
  31.     int st = -1;
  32.     while (st < limit) {
  33.         boolean flipped = false;
  34.         st++;
  35.         limit--;
  36.         for (j = st; j < limit; j++) {
  37.         if (stopRequested) {
  38.             return;
  39.         }
  40.         if (a[j] > a[j + 1]) {
  41.             int T = a[j];
  42.             a[j] = a[j + 1];
  43.             a[j + 1] = T;
  44.             flipped = true;
  45.             pause(st, limit);
  46.         }
  47.         }
  48.         if (!flipped) {
  49.         return;
  50.         }
  51.         for (j = limit; --j >= st;) {
  52.         if (stopRequested) {
  53.             return;
  54.         }
  55.         if (a[j] > a[j + 1]) {
  56.             int T = a[j];
  57.             a[j] = a[j + 1];
  58.             a[j + 1] = T;
  59.             flipped = true;
  60.             pause(st, limit);
  61.         }
  62.         }
  63.         if (!flipped) {
  64.         return;
  65.         }
  66.     }
  67.     pause(st, limit);
  68.     }
  69. }
  70.