Skip to content

Commit 6dbb849

Browse files
committed
Added Interpolation and exponential searches in the javascript repo
1 parent 4cbdc9e commit 6dbb849

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed

Search/ExponentialSearch.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Exponential Search
3+
*
4+
* The algorithm consists of two stages. The first stage determines a
5+
* range in which the search key would reside if it were in the list.
6+
* In the second stage, a binary search is performed on this range.
7+
*
8+
*
9+
*
10+
*/
11+
12+
function binarySearch(arr, x, floor, ceiling) {
13+
// Middle index
14+
let mid = Math.floor((floor + ceiling) / 2);
15+
16+
// If value is at the mid position return this position
17+
if (arr[mid] === x) {
18+
return mid;
19+
}
20+
21+
if(floor > ceiling) return -1;
22+
23+
// If the middle element is great than the value
24+
// search the left part of the array
25+
if (arr[mid] > value) {
26+
return binarySearch(arr, value, floor, mid - 1);
27+
//If the middle element is lower than the value
28+
//search the right part of the array
29+
} else {
30+
return binarySearch(arr, value, mid + 1, ceiling);
31+
}
32+
33+
34+
}
35+
36+
37+
function exponentialSearch(arr, length, value) {
38+
// If value is the first element of the array return this position
39+
if (arr[0] == value) {
40+
return 0;
41+
}
42+
43+
// Find range for binary search
44+
let i = 1;
45+
while (i < length && arr[i] <= value) {
46+
i = i * 2;
47+
}
48+
49+
// Call binary search for the range found above
50+
return binarySearch(arr, value, i / 2, Math.min(i, length));
51+
}
52+
53+
let arr = [2, 3, 4, 10, 40, 65 , 78 , 100];
54+
let value = 78;
55+
let result = exponentialSearch(arr, arr.length, value);
56+
57+
if (result < 0) {
58+
console.log("Element not found");
59+
} else {
60+
console.log("Element found at position :" + result);
61+
}

Search/InterpolationSearch.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Interpolation Search
3+
*
4+
* Time Complexity:
5+
* -Best case: O(1)
6+
* -Worst case: O(n)
7+
* -O((log(log(n))) If the data are uniformly distributed
8+
*
9+
*
10+
*/
11+
12+
function interpolationSearch(arr, key) {
13+
14+
let length = arr.length - 1;
15+
let low = 0;
16+
let high = length;
17+
let position = -1;
18+
let delta = -1;
19+
20+
//Because the array is sorted the key must be between low and high
21+
while (low <= high && key >= arr[low] && key <= arr[high]) {
22+
23+
delta = (key - arr[low]) / (arr[high] - arr[low]);
24+
position = low + Math.floor((high - low) * delta);
25+
26+
//Target found return its position
27+
if (arr[position] === key) {
28+
return position;
29+
}
30+
31+
//If the key is larger then it is in the upper part of the array
32+
if (arr[position] < key) {
33+
low = position + 1;
34+
//If the key is smaller then it is in the lower part of the array
35+
} else {
36+
high = position - 1;
37+
}
38+
}
39+
40+
return -1;
41+
}
42+
43+
44+
let arr = [2, 6, 8, 10, 12, 14, 16, 18, 20, 22, 26, 34, 39];
45+
46+
console.log("Found at position :" + interpolationSearch(arr, 2));
47+
console.log("Found at position :" + interpolationSearch(arr, 12));
48+
console.log("Found at position :" + interpolationSearch(arr, 1000));
49+
console.log("Found at position :" + interpolationSearch(arr, 39));

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy