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;  
}