int binarySearch(final T[] a, final T key){
if (a.lenght == 0){
return -1;
}
while (bottom + 1 != top){
final int mid = bottom + (top - bottom) / 2;
if (a[mid].compareTo(key) > 0) {
top = mid;
} else {
bottom = mid;
}
}
return a[bottom].compareTo(key) == 0 ? bottom : -1;
}