diff --git a/Searches/JumpSearch.java b/Searches/JumpSearch.java new file mode 100644 index 000000000..897bda6c4 --- /dev/null +++ b/Searches/JumpSearch.java @@ -0,0 +1,39 @@ +package Searches; + +public class JumpSearch implements SearchAlgorithm { + + public static void main(String[] args) { + JumpSearch jumpSearch = new JumpSearch(); + Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + for (int i = 0; i < array.length; i++) { + assert jumpSearch.find(array, i) == i; + } + assert jumpSearch.find(array, -1) == -1; + assert jumpSearch.find(array, 11) == -1; + } + + /** + * Jump Search algorithm implements + * + * @param array the array contains elements + * @param key to be searched + * @return index of {@code key} if found, otherwise -1 + */ + @Override + public > int find(T[] array, T key) { + int length = array.length; /* length of array */ + int blockSize = (int) Math.sqrt(length); /* block size to be jumped */ + + int limit = blockSize; + while (key.compareTo(array[limit]) > 0 && limit < array.length - 1) { + limit = Math.min(limit + blockSize, array.length - 1); + } + + for (int i = limit - blockSize; i <= limit; i++) { + if (array[i] == key) { /* execute linear search */ + return i; + } + } + return -1; /* not found */ + } +}