home *** CD-ROM | disk | FTP | other *** search
- package allaire.util;
-
- public class QuickSort {
- SortCallback caller;
- int position;
- int rows;
- int maxrows;
- int[] index;
- Object[] elem;
- public static final int SMALLEST_PARTITION = 15;
- public static final int STACK_CHUNK = 100;
-
- public void isort(int var1, int var2) {
- if (this.caller != null) {
- for(int var3 = var1 + 1; var3 <= var2; ++var3) {
- for(int var4 = var3 - 1; var4 >= 0 && this.caller.Compare(this.elem[this.index[var4]], this.elem[this.index[var4 + 1]]) > 0; --var4) {
- int var5 = this.index[var4 + 1];
- this.index[var4 + 1] = this.index[var4];
- this.index[var4] = var5;
- }
- }
-
- }
- }
-
- public QuickSort(int var1) {
- this.maxrows = var1;
- this.index = new int[var1];
- this.elem = new Object[var1];
- }
-
- public void sort() {
- int var1 = 100;
- int var2 = 0;
- int var3 = 0;
- QuickSortStack[] var4 = new QuickSortStack[var1];
- if (this.rows >= 2) {
- var4[0] = new QuickSortStack();
- var4[0].left = 0;
- var4[0].right = this.rows - 1;
-
- while(var2 >= 0) {
- int var5 = var4[var2].left;
- int var6 = var4[var2].right;
- --var2;
- int var7 = this.index[var5];
- this.index[var5] = this.index[(var6 + var5) / 2];
- this.index[(var6 + var5) / 2] = var7;
- int var8 = var5 + 1;
-
- int var9;
- for(var9 = var6; this.caller.Compare(this.elem[this.index[var8]], this.elem[this.index[var5]]) <= 0 && var8 < var6; ++var8) {
- }
-
- while(var9 > var5 && this.caller.Compare(this.elem[this.index[var9]], this.elem[this.index[var5]]) >= 0) {
- --var9;
- }
-
- if (var9 > var8) {
- var7 = this.index[var8];
- this.index[var8] = this.index[var9];
- this.index[var9] = var7;
- }
-
- var7 = this.index[var5];
- this.index[var5] = this.index[var9];
- this.index[var9] = var7;
- if (var9 - var5 >= 15) {
- if (var2 == var3) {
- ++var3;
- if (var1 <= var3) {
- var4 = this.reallocatestack(var4, var1, var1 + 100);
- var1 += 100;
- }
-
- var4[var3] = new QuickSortStack();
- }
-
- ++var2;
- var4[var2].left = var5;
- var4[var2].right = var9 - 1;
- }
-
- if (var6 - var9 >= 15) {
- if (var2 == var3) {
- ++var3;
- if (var1 <= var3) {
- var4 = this.reallocatestack(var4, var1, var1 + 100);
- var1 += 100;
- }
-
- var4[var3] = new QuickSortStack();
- }
-
- ++var2;
- var4[var2].left = var9 + 1;
- var4[var2].right = var6;
- }
- }
-
- this.isort(0, this.rows - 1);
- }
- }
-
- public Object getnextrow() {
- return ++this.position < this.rows ? this.elem[this.index[this.position]] : null;
- }
-
- public Object getfirstrow() {
- this.position = 0;
- return this.position < this.rows ? this.elem[this.index[this.position]] : null;
- }
-
- public QuickSortStack[] reallocatestack(QuickSortStack[] var1, int var2, int var3) {
- QuickSortStack[] var4 = new QuickSortStack[var3];
-
- for(int var5 = 0; var5 < var2; ++var5) {
- var4[var5] = var1[var5];
- }
-
- return var4;
- }
-
- public void setSortCallbackHandler(SortCallback var1) {
- this.caller = var1;
- }
-
- public boolean addrow(Object var1) {
- if (this.rows < this.maxrows) {
- this.elem[this.rows] = var1;
- this.index[this.rows] = this.rows++;
- return true;
- } else {
- return false;
- }
- }
- }
-