public class ListSort<T>
extends java.lang.Object
Disclaimer : I was intrigued by the use of val >>> 1 in java 7 Timsort class
instead of val / 2 (integer division). Micro benching revealed that val >>> 1
is twice faster than val / 2 in java 6 and has similar perf in java 7. The
following code uses val >>> 1 when ever a value needs to be divided by 2 and
rounded to its floor
Constructor and Description |
---|
ListSort()
Creates a ListSort
|
Modifier and Type | Method and Description |
---|---|
void |
allocateStack(int len)
Allocate temp variables for the given length This method should be called
at least once, but only if the length of the list to sort changed before
sorting
|
int |
getLength()
return the useful length of the array being sorted
|
void |
innerMergeHigh(java.util.Comparator<T> comp,
T[] tempArray,
T[] arr,
int idxA)
Attempt to unroll "goto" style original implementation.
|
void |
innerMergeLow(java.util.Comparator<T> comp,
T[] arr,
T[] tempArray)
Attempt to unroll "goto" style original implementation.
|
static void |
main(java.lang.String[] argv)
test case
|
void |
sort(T[] array,
java.util.Comparator<T> comparator)
Sort the given array given the comparator
|
public final void allocateStack(int len)
len
- public void sort(T[] array, java.util.Comparator<T> comparator)
array
- the array to sortcomparator
- the comparator to compare elements of the arraypublic void innerMergeLow(java.util.Comparator<T> comp, T[] arr, T[] tempArray)
comp
- comparatorarr
- the arraytempArray
- the temp arraypublic void innerMergeHigh(java.util.Comparator<T> comp, T[] tempArray, T[] arr, int idxA)
comp
- comparatorarr
- the arraytempArray
- the temp arrayidxA
- the index of the first element of run Apublic int getLength()
public static void main(java.lang.String[] argv)