home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / allaire / util / QuickSort.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-12  |  1.8 KB  |  138 lines

  1. package allaire.util;
  2.  
  3. public class QuickSort {
  4.    SortCallback caller;
  5.    int position;
  6.    int rows;
  7.    int maxrows;
  8.    int[] index;
  9.    Object[] elem;
  10.    public static final int SMALLEST_PARTITION = 15;
  11.    public static final int STACK_CHUNK = 100;
  12.  
  13.    public void isort(int var1, int var2) {
  14.       if (this.caller != null) {
  15.          for(int var3 = var1 + 1; var3 <= var2; ++var3) {
  16.             for(int var4 = var3 - 1; var4 >= 0 && this.caller.Compare(this.elem[this.index[var4]], this.elem[this.index[var4 + 1]]) > 0; --var4) {
  17.                int var5 = this.index[var4 + 1];
  18.                this.index[var4 + 1] = this.index[var4];
  19.                this.index[var4] = var5;
  20.             }
  21.          }
  22.  
  23.       }
  24.    }
  25.  
  26.    public QuickSort(int var1) {
  27.       this.maxrows = var1;
  28.       this.index = new int[var1];
  29.       this.elem = new Object[var1];
  30.    }
  31.  
  32.    public void sort() {
  33.       int var1 = 100;
  34.       int var2 = 0;
  35.       int var3 = 0;
  36.       QuickSortStack[] var4 = new QuickSortStack[var1];
  37.       if (this.rows >= 2) {
  38.          var4[0] = new QuickSortStack();
  39.          var4[0].left = 0;
  40.          var4[0].right = this.rows - 1;
  41.  
  42.          while(var2 >= 0) {
  43.             int var5 = var4[var2].left;
  44.             int var6 = var4[var2].right;
  45.             --var2;
  46.             int var7 = this.index[var5];
  47.             this.index[var5] = this.index[(var6 + var5) / 2];
  48.             this.index[(var6 + var5) / 2] = var7;
  49.             int var8 = var5 + 1;
  50.  
  51.             int var9;
  52.             for(var9 = var6; this.caller.Compare(this.elem[this.index[var8]], this.elem[this.index[var5]]) <= 0 && var8 < var6; ++var8) {
  53.             }
  54.  
  55.             while(var9 > var5 && this.caller.Compare(this.elem[this.index[var9]], this.elem[this.index[var5]]) >= 0) {
  56.                --var9;
  57.             }
  58.  
  59.             if (var9 > var8) {
  60.                var7 = this.index[var8];
  61.                this.index[var8] = this.index[var9];
  62.                this.index[var9] = var7;
  63.             }
  64.  
  65.             var7 = this.index[var5];
  66.             this.index[var5] = this.index[var9];
  67.             this.index[var9] = var7;
  68.             if (var9 - var5 >= 15) {
  69.                if (var2 == var3) {
  70.                   ++var3;
  71.                   if (var1 <= var3) {
  72.                      var4 = this.reallocatestack(var4, var1, var1 + 100);
  73.                      var1 += 100;
  74.                   }
  75.  
  76.                   var4[var3] = new QuickSortStack();
  77.                }
  78.  
  79.                ++var2;
  80.                var4[var2].left = var5;
  81.                var4[var2].right = var9 - 1;
  82.             }
  83.  
  84.             if (var6 - var9 >= 15) {
  85.                if (var2 == var3) {
  86.                   ++var3;
  87.                   if (var1 <= var3) {
  88.                      var4 = this.reallocatestack(var4, var1, var1 + 100);
  89.                      var1 += 100;
  90.                   }
  91.  
  92.                   var4[var3] = new QuickSortStack();
  93.                }
  94.  
  95.                ++var2;
  96.                var4[var2].left = var9 + 1;
  97.                var4[var2].right = var6;
  98.             }
  99.          }
  100.  
  101.          this.isort(0, this.rows - 1);
  102.       }
  103.    }
  104.  
  105.    public Object getnextrow() {
  106.       return ++this.position < this.rows ? this.elem[this.index[this.position]] : null;
  107.    }
  108.  
  109.    public Object getfirstrow() {
  110.       this.position = 0;
  111.       return this.position < this.rows ? this.elem[this.index[this.position]] : null;
  112.    }
  113.  
  114.    public QuickSortStack[] reallocatestack(QuickSortStack[] var1, int var2, int var3) {
  115.       QuickSortStack[] var4 = new QuickSortStack[var3];
  116.  
  117.       for(int var5 = 0; var5 < var2; ++var5) {
  118.          var4[var5] = var1[var5];
  119.       }
  120.  
  121.       return var4;
  122.    }
  123.  
  124.    public void setSortCallbackHandler(SortCallback var1) {
  125.       this.caller = var1;
  126.    }
  127.  
  128.    public boolean addrow(Object var1) {
  129.       if (this.rows < this.maxrows) {
  130.          this.elem[this.rows] = var1;
  131.          this.index[this.rows] = this.rows++;
  132.          return true;
  133.       } else {
  134.          return false;
  135.       }
  136.    }
  137. }
  138.