Skip to content

Jump Search

In this tutorial, you will learn about jump search. Also, you will find working examples of jump search in C, C++, Java and Python.

Given an array of n sorted elements, search for an element x in the array.

Linear Search will take O(n) time while Binary Search needs O(log n) time.

Jump Search improves over Linear Search by checking fewer elements than Linear Search. It jumps ahead fixed steps or skips some elements instead of searching all the elements.

Jump Search Algorithm

1. Let jump size be m 
2. Compare x with arr[m], arr[2m], ..., arr[km], ... and so on
3. Find the range arr[km] <= x <= arr[(k+1)m] 
4. Perform Linear Search from the index km to find x

Optimal Block Size to be skipped

The total number of comparisons for the worst case =  ((n/m) + m-1)
The value of ((n/m) + m-1) will be minimum when m = √n. 
The best step size is m = √n.
  // C program to implement jump search 
  // with recursion 
  #include <stdio.h> 

  int jumpSearch(int arr[], int x, int n) 
  { 
      // Finding block size to be jumped 
      int step = sqrt(n); 

      // Finding the block where element is 
      // present (if it is present) 
      int prev = 0; 
      while (arr[min(step, n)-1] < x) 
      { 
          prev = step; 
          step += sqrt(n); 
          if (prev >= n) 
              return -1; 
      } 

      // Doing a linear search for x in block 
      // beginning with prev. 
      while (arr[prev] < x) 
      { 
          prev++; 

          // If we reached next block or end of 
          // array, element is not present. 
          if (prev == min(step, n)) 
              return -1; 
      } 
      // If element is found 
      if (arr[prev] == x) 
          return prev; 

      return -1; 
  } 

  // Driver program to test function 
  int main() 
  { 
      int arr[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 
                  34, 55, 89, 144, 233, 377, 610 }; 
      int x = 55; 
      int n = sizeof(arr) / sizeof(arr[0]); 

      // Find the index of 'x' using Jump Search 
      int index = jumpSearch(arr, x, n); 
      (result == -1)? printf("Element is not present in array") 
                  : printf("Element is present at index %d", 
                                                      result); 
      return 0; 
  } 
  // C++ program to implement Jump Search 

  #include <bits/stdc++.h> 
  using namespace std; 

  int jumpSearch(int arr[], int x, int n) 
  { 
      // Finding block size to be jumped 
      int step = sqrt(n); 

      // Finding the block where element is 
      // present (if it is present) 
      int prev = 0; 
      while (arr[min(step, n)-1] < x) 
      { 
          prev = step; 
          step += sqrt(n); 
          if (prev >= n) 
              return -1; 
      } 

      // Doing a linear search for x in block 
      // beginning with prev. 
      while (arr[prev] < x) 
      { 
          prev++; 

          // If we reached next block or end of 
          // array, element is not present. 
          if (prev == min(step, n)) 
              return -1; 
      } 
      // If element is found 
      if (arr[prev] == x) 
          return prev; 

      return -1; 
  } 

  // Driver program to test function 
  int main() 
  { 
      int arr[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 
                  34, 55, 89, 144, 233, 377, 610 }; 
      int x = 55; 
      int n = sizeof(arr) / sizeof(arr[0]); 

      // Find the index of 'x' using Jump Search 
      int index = jumpSearch(arr, x, n); 

      // Print the index where 'x' is located 
      cout << "\nNumber " << x << " is at index " << index; 
      return 0; 
  } 
  # Python3 code to implement Jump Search 
  import math 

  def jumpSearch( arr , x , n ): 

      # Finding block size to be jumped 
      step = math.sqrt(n) 

      # Finding the block where element is 
      # present (if it is present) 
      prev = 0
      while arr[int(min(step, n)-1)] < x: 
          prev = step 
          step += math.sqrt(n) 
          if prev >= n: 
              return -1

      # Doing a linear search for x in  
      # block beginning with prev. 
      while arr[int(prev)] < x: 
          prev += 1

          # If we reached next block or end  
          # of array, element is not present. 
          if prev == min(step, n): 
              return -1

      # If element is found 
      if arr[int(prev)] == x: 
          return prev 

      return -1

  # Driver code to test function 
  arr = [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 
      34, 55, 89, 144, 233, 377, 610 ] 
  x = 55
  n = len(arr) 

  # Find the index of 'x' using Jump Search 
  index = jumpSearch(arr, x, n) 

  # Print the index where 'x' is located 
  print("Number" , x, "is at index" ,"%.0f"%index) 
  // Java program to implement Jump Search. 
  public class JumpSearch 
  { 
      public static int jumpSearch(int[] arr, int x) 
      { 
          int n = arr.length; 

          // Finding block size to be jumped 
          int step = (int)Math.floor(Math.sqrt(n)); 

          // Finding the block where element is 
          // present (if it is present) 
          int prev = 0; 
          while (arr[Math.min(step, n)-1] < x) 
          { 
              prev = step; 
              step += (int)Math.floor(Math.sqrt(n)); 
              if (prev >= n) 
                  return -1; 
          } 

          // Doing a linear search for x in block 
          // beginning with prev. 
          while (arr[prev] < x) 
          { 
              prev++; 

              // If we reached next block or end of 
              // array, element is not present. 
              if (prev == Math.min(step, n)) 
                  return -1; 
          } 

          // If element is found 
          if (arr[prev] == x) 
              return prev; 

          return -1; 
      } 

      // Driver program to test function 
      public static void main(String [ ] args) 
      { 
          int arr[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 
                      34, 55, 89, 144, 233, 377, 610}; 
          int x = 55; 

          // Find the index of 'x' using Jump Search 
          int index = jumpSearch(arr, x); 

          // Print the index where 'x' is located 
          System.out.println("\nNumber " + x + 
                              " is at index " + index); 
      } 
  } 

Jump Search Complexities

Time Complexity = O(√n)

Space Complexity = O(1)

Important Points

  1. Works only sorted arrays.
  2. The optimal size of a block to be jumped is (√ n). This makes the time complexity of Jump Search O(√ n).
  3. The time complexity of Jump Search is between Linear Search ((O(n)) and Binary Search (O(Log n)).
  4. It performs better than Binary Search when x lies closer to the first element.

See also :

Linear Search
Binary Search
Interpolation Search
Exponential Search