Files
webmin/file/QuickSort.java
2007-05-14 18:45:08 +00:00

78 lines
1.8 KiB
Java

public class QuickSort
{
static int col, dir;
// Sorts entire array
public static void sort(RemoteFile array[], int c, int d)
{
col = c;
dir = d;
psort(array, 0, array.length - 1);
}
// Sorts partial array
public static void psort(RemoteFile array[], int start, int end)
{
int p;
if (end > start)
{
p = partition(array, start, end);
psort(array, start, p-1);
psort(array, p+1, end);
}
}
protected static int compare(RemoteFile a, RemoteFile b) {
long rv = 0;
if (col == 1)
rv = a.name.toLowerCase().compareTo(b.name.toLowerCase());
else if (col == 2)
rv = a.size - b.size;
else if (col == 3)
rv = a.user.compareTo(b.user);
else if (col == 4)
rv = a.group.compareTo(b.group);
else
rv = a.modified - b.modified;
rv = rv < 0 ? -1 : rv > 0 ? 1 : 0;
return (int)(dir == 2 ? -rv : rv);
}
protected static int partition(RemoteFile array[], int start, int end)
{
int left, right;
RemoteFile partitionElement;
// Arbitrary partition start...there are better ways...
partitionElement = array[end];
left = start - 1;
right = end;
for (;;)
{
while (compare(partitionElement, array[++left]) == 1)
{
if (left == end) break;
}
while (compare(partitionElement, array[--right]) == -1)
{
if (right == start) break;
}
if (left >= right) break;
swap(array, left, right);
}
swap(array, left, end);
return left;
}
protected static void swap(RemoteFile array[], int i, int j)
{
RemoteFile temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}