app.d 1019 B

1234567891011121314151617181920212223242526272829303132333435
  1. import std.array;
  2. bool binarySearch(T)(T[] input, T value)
  3. {
  4. while (!input.empty)
  5. {
  6. auto i = input.length / 2;
  7. auto mid = input[i];
  8. if (mid > value) input = input[0 .. i];
  9. else if (mid < value) input = input[i + 1 .. $];
  10. else return true;
  11. }
  12. return false;
  13. }
  14. // рекурсивная версия
  15. bool binarySearchR(T)(T[] input, T value)
  16. {
  17. if (input.empty) return false;
  18. auto i = input.length / 2;
  19. auto mid = input[i];
  20. if (mid > value) return binarySearch(input[0 .. i], value);
  21. if (mid < value) return binarySearch(input[i + 1 .. $], value);
  22. return true;
  23. }
  24. unittest
  25. {
  26. assert(binarySearch([ 1, 3, 6, 7, 9, 15 ], 6));
  27. assert(!binarySearch([ 1, 3, 6, 7, 9, 15 ], 5));
  28. assert(binarySearchR([ 1, 3, 6, 7, 9, 15 ], 6));
  29. assert(!binarySearchR([ 1, 3, 6, 7, 9, 15 ], 5));
  30. // Ука­зать T яв­но (на­при­мер, для на­деж­но­сти)
  31. assert(binarySearch!(int)([ 1, 3, 6, 7, 9, 15 ], 6));
  32. }