Перенос страниц
This commit is contained in:
parent
4d57446057
commit
4c954c9186
129 changed files with 14 additions and 15 deletions
35
book/01-знакомство-с-языком-d/src/chapter-1-4-2/app.d
Normal file
35
book/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