import std.array; bool binarySearch(T)(T[] input, T value) { while (!input.empty) { auto i = input.length / 2; auto mid = input[i]; if (mid > value) input = input[0 .. i]; else if (mid < value) input = input[i + 1 .. $]; else return true; } return false; } // рекурсивная версия bool binarySearchR(T)(T[] input, T value) { if (input.empty) return false; auto i = input.length / 2; auto mid = input[i]; if (mid > value) return binarySearch(input[0 .. i], value); if (mid < value) return binarySearch(input[i + 1 .. $], value); return true; } unittest { assert(binarySearch([ 1, 3, 6, 7, 9, 15 ], 6)); assert(!binarySearch([ 1, 3, 6, 7, 9, 15 ], 5)); assert(binarySearchR([ 1, 3, 6, 7, 9, 15 ], 6)); assert(!binarySearchR([ 1, 3, 6, 7, 9, 15 ], 5)); // Ука­зать T яв­но (на­при­мер, для на­деж­но­сти) assert(binarySearch!(int)([ 1, 3, 6, 7, 9, 15 ], 6)); }