package com.interview.algorithms.tree;
import com.interview.basics.sort.QuickSorter;
public class C5_3_BSTUsingArray<T extends Comparable>{
T[] input;
static QuickSorter SORTER = new QuickSorter();
public C5_3_BSTUsingArray(T[] input) {
//sort before set
this.input = input;
SORTER.sort(input);
}
public int searchIterative(int item) {
int N = this.input.length - 1;
int k = N/2;
while(true){
int ck = k;
if(k <= 0 || k >= N) return -1;
else if(input[k].compareTo(item) == 0) return k;
else if(input[k].compareTo(item) < 0) k = k/2;
else k = k + (N-k)/2;
N = ck;
}
}
public int search(int item){
return search(item, 0, input.length - 1);
}
private int search(int item, int lo, int hi){
if(hi < lo) return -1;
int mid = lo + (hi - lo)/2;
if(input[mid].compareTo(item) == 0) return mid;
else if(input[mid].compareTo(item) > 0) return search(item, lo, mid - 1);
else return search(item, mid + 1, hi);
}
}