добавлен исходный код и ссылки
This commit is contained in:
parent
c83ed6cf42
commit
4be7b9c4ce
15 changed files with 438 additions and 1 deletions
35
01-знакомство-с-языком-d/src/chapter-1-4-2/app.d
Normal file
35
01-знакомство-с-языком-d/src/chapter-1-4-2/app.d
Normal file
|
@ -0,0 +1,35 @@
|
|||
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));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue