ojSort<T extends Comparable> function
utilities
- List<
T> a
Heapsort somewhat optimized for small sets, like a hand of cards.
Implementation
void ojSort<T extends Comparable>(List<T> a) {
switch (a.length) {
case 5:
if (a[0].compareTo(a[1]) < 0) {
T temp = a[0];
a[0] = a[1];
a[1] = temp;
}
if (a[3].compareTo(a[4]) < 0) {
T temp = a[3];
a[3] = a[4];
a[4] = temp;
}
if (a[2].compareTo(a[4]) < 0) {
T temp = a[2];
a[2] = a[4];
a[4] = temp;
}
if (a[2].compareTo(a[3]) < 0) {
T temp = a[2];
a[2] = a[3];
a[3] = temp;
}
if (a[0].compareTo(a[3]) < 0) {
T temp = a[0];
a[0] = a[3];
a[3] = temp;
}
if (a[0].compareTo(a[2]) < 0) {
T temp = a[0];
a[0] = a[2];
a[2] = temp;
}
if (a[1].compareTo(a[4]) < 0) {
T temp = a[1];
a[1] = a[4];
a[4] = temp;
}
if (a[1].compareTo(a[3]) < 0) {
T temp = a[1];
a[1] = a[3];
a[3] = temp;
}
if (a[1].compareTo(a[2]) < 0) {
T temp = a[1];
a[1] = a[2];
a[2] = temp;
}
break;
case 4:
if (a[0].compareTo(a[1]) < 0) {
T temp = a[0];
a[0] = a[1];
a[1] = temp;
}
if (a[2].compareTo(a[3]) < 0) {
T temp = a[2];
a[2] = a[3];
a[3] = temp;
}
if (a[0].compareTo(a[2]) < 0) {
T temp = a[0];
a[0] = a[2];
a[2] = temp;
}
if (a[1].compareTo(a[3]) < 0) {
T temp = a[1];
a[1] = a[3];
a[3] = temp;
}
if (a[1].compareTo(a[2]) < 0) {
T temp = a[1];
a[1] = a[2];
a[2] = temp;
}
break;
case 3:
if (a[1].compareTo(a[2]) < 0) {
T temp = a[1];
a[1] = a[2];
a[2] = temp;
}
if (a[0].compareTo(a[2]) < 0) {
T temp = a[0];
a[0] = a[2];
a[2] = temp;
}
if (a[0].compareTo(a[1]) < 0) {
T temp = a[0];
a[0] = a[1];
a[1] = temp;
}
break;
case 2:
if (a[0].compareTo(a[1]) < 0) {
T temp = a[0];
a[0] = a[1];
a[1] = temp;
}
break;
case 1:
case 0:
break;
default:
for (int i = a.length ~/ 2; i >= 0; i -= 1) {
_heapify(a, a.length, i);
}
for (int i = a.length - 1; i >= 1; i -= 1) {
T temp = a[0];
a[0] = a[i];
a[i] = temp;
_heapify(a, i, 0);
}
break;
}
}