From c79fea2d3c8206a2bec6cc5cf784544c58205cbd Mon Sep 17 00:00:00 2001 From: iambigyandahal Date: Fri, 1 Oct 2021 19:11:16 +0545 Subject: [PATCH] Jump Search --- jump-search.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 jump-search.cpp diff --git a/jump-search.cpp b/jump-search.cpp new file mode 100644 index 0000000..d21ff02 --- /dev/null +++ b/jump-search.cpp @@ -0,0 +1,59 @@ +// Jump Search + +// Includes +#include + +// Function prototyping +int search(int arr[], int n, int x); +int linearSearch(int arr[], int l, int n, int x); + +// Main function +int main() { + int arr[] = {3,4,5,6,7}; + int n = sizeof(arr)/sizeof(arr[0]); + int x = 7; + int result = search(arr, n, x); + std::cout << result; + return 0; +} + +// Jump search function +// optimal step is square root of n +// jumps everytime with step and checks if the value at step +// is less than the element to be found +// if it greater the block between prev and step is finally searched +// using linear search but if element to be found is not in the array +// -1 is returned +// in linear search if element is found index is returned otherwise +// -1 is returned +int search(int arr[], int n, int x) { + int index = -1, result = 0; + int step = sqrt(n); + + int prev = 0; + + while(arr[std::min(step, n) - 1] < x) { + prev = step; + step += sqrt(n); + if(prev >= n) { + return index; + } + } + + result = linearSearch(arr, prev, std::min(step, n), x); + + return result; +} + + +// Linear search from linear-search.cpp with some modification +int linearSearch(int arr[], int l, int n, int x) { + int index = -1, i = 0; + for(i=l;i