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