diff --git a/DIRECTORY.md b/DIRECTORY.md index 27e6143..35c593e 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -47,6 +47,7 @@ * [Binary Search](https://github.com/TheAlgorithms/Ruby/blob/master/searches/binary_search.rb) * [Depth First Search](https://github.com/TheAlgorithms/Ruby/blob/master/searches/depth_first_search.rb) * [Linear Search](https://github.com/TheAlgorithms/Ruby/blob/master/searches/linear_search.rb) + * [Double Linear Search](https://github.com/TheAlgorithms/Ruby/blob/master/searches/double_linear_search.rb) * [Recursive Linear Search](https://github.com/TheAlgorithms/Ruby/blob/master/searches/recursive_linear_search.rb) ## Sorting diff --git a/searches/double_linear_search.rb b/searches/double_linear_search.rb new file mode 100644 index 0000000..86abbfe --- /dev/null +++ b/searches/double_linear_search.rb @@ -0,0 +1,29 @@ +# Iterate through the array from both sides to find the index of search_item. + +def double_linear_search(array, search_item) + start_ind = 0 + end_ind = array.length - 1 + + while start_ind <= end_ind + return start_ind if array[start_ind] == search_item + return end_ind if array[end_ind] == search_item + + start_ind += 1 + end_ind -= 1 + end + + # returns -1 if search_item is not found in array + -1 +end + +puts(double_linear_search([1, 5, 5, 10], 1)) +# => 0 + +puts(double_linear_search([1, 5, 5, 10], 5)) +# => 1 + +puts(double_linear_search([1, 5, 5, 10], 100)) +# => -1 + +puts(double_linear_search([1, 5, 5, 10], 10)) +# => 3