public static T TSearch <T, T2>(IList <T> list, int low, int high, T2 find, BinarySeachCompare <T, T2> compare) { if (low > high) { return(default(T)); } int mid = (low + high) / 2; if (compare(list[mid], find) > 0) { return(TSearch(list, low, mid - 1, find, compare)); } else if (compare(list[mid], find) < 0) { return(TSearch(list, mid + 1, high, find, compare)); } return(list[mid]); }
public static T TSearch <T, JR>(IList <T> list, int low, int high, JR find, BinarySeachCompare <T, JR> compare) { if (list == null || list.Count == 0) { return(default(T)); } if (low > high) { return(default(T)); } var mid = (low + high) / 2; if (compare(list[mid], find) > 0) { return(TSearch(list, low, mid - 1, find, compare)); } else if (compare(list[mid], find) < 0) { return(TSearch(list, mid + 1, high, find, compare)); } return(list[mid]); }