Advertisement
Guest User

Untitled

a guest
Aug 20th, 2014
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #include <vector>
  4. #include <iterator>
  5.  
  6. using namespace std;
  7.  
  8. template<typename t_iter>
  9. t_iter binarySearch(t_iter begin, t_iter end, typename iterator_traits<t_iter>::value_type q)
  10. {
  11. typedef iterator_traits<t_iter>::value_type t_elem;
  12. size_t len = end - begin;
  13.  
  14. if (len < 2)
  15. {
  16. if (*begin == q)
  17. {
  18. return begin;
  19. }
  20.  
  21. return end;
  22. }
  23.  
  24. t_iter middleElem = begin + len / 2;
  25.  
  26. if (*middleElem < q)
  27. {
  28. return binarySearch(middleElem, end, q);
  29. }
  30.  
  31. return binarySearch(begin, middleElem, q);
  32. }
  33.  
  34. int main()
  35. {
  36. int tmp[] = {1, 2, 4, 5, 8, 10, 20, 35, 41, 42, 100};
  37. size_t len = sizeof(tmp)/sizeof(tmp[0]);
  38. vector<int> a(tmp, tmp + len);
  39.  
  40. int q = 35;
  41.  
  42. auto it = binarySearch(a.begin(), a.end(), q);
  43.  
  44. cout << distance(a.begin(), it) << endl;
  45. }
  46.  
  47. template<typename t_iter>
  48. t_iter binarySearch(t_iter begin, t_iter end, typename iterator_traits<t_iter>::value_type q)
  49. {
  50. auto len = std::distance(begin, end);
  51.  
  52. while(len>1)
  53. {
  54. t_iter middleElem = begin;
  55. std::advance(middleElem, len / 2);
  56.  
  57. if (*middleElem < q)
  58. {
  59. begin = middleElem;
  60. }
  61. else
  62. {
  63. end = middleElem;
  64. }
  65. len = std::distance(begin, end);
  66. }
  67.  
  68. if (*begin == q)
  69. {
  70. return begin;
  71. }
  72. return end;
  73.  
  74. }
  75.  
  76. if (len < 2)
  77. {
  78. if (*begin == q)
  79.  
  80. typedef iterator_traits<t_iter>::value_type t_elem;
  81.  
  82. auto it = binarySearch(a.begin(), a.end(), q);
  83.  
  84. int tmp[] = {1, 2, 4, 5, 8, 10, 20, 35, 41, 42, 100};
  85. size_t len = sizeof(tmp)/sizeof(tmp[0]);
  86. vector<int> a(tmp, tmp + len);
  87.  
  88. vector<int> a = {1, 2, 4, 5, 8, 10, 20, 35, 41, 42, 100};
  89.  
  90. typedef typename iterator_traits<t_iter>::value_type t_elem;
  91.  
  92. using t_elem = typename iterator_traits<t_iter>::value_type;
  93.  
  94. template <class Iterator>
  95. using Value_type = typename std::iterator_traits<Iterator>::value_type;
  96.  
  97. template<typename t_iter>
  98. t_iter binarySearch(t_iter begin, t_iter end, Value_type<t_iter> q)
  99.  
  100. t_iter middleElem = begin + len / 2;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement