Skip to content

Commit 93f5bf3

Browse files
committed
changed ternarySearch to be more like recursive, fixed recursive, tests now correct
1 parent dedde40 commit 93f5bf3

File tree

2 files changed

+25
-28
lines changed

2 files changed

+25
-28
lines changed

src/_Searching_/TernarySearch/TernarySearch.test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ describe('Ternary Search', () => {
1515
});
1616
describe('When element to find is at last position ', () => {
1717
it('Ternary search with Loop', () => {
18-
expect(ternarySearch(array, 7)).toEqual(6);
18+
expect(ternarySearch(array, 8)).toEqual(7);
1919
});
2020
it('Ternary serach with recursion', () => {
21-
expect(ternarySearchRecursive(array, low, high, 7)).toEqual(6);
21+
expect(ternarySearchRecursive(array, low, high, 8)).toEqual(7);
2222
});
2323
});
2424
describe('When element to find is at random position ', () => {

src/_Searching_/TernarySearch/index.js

+23-26
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,49 @@
11
/**
2-
* Note: Array must be sorted for binary search
2+
* Note: Array must be sorted for ternary search
33
* Complexity:
44
* Worst case time complexity: O(log N)
55
* Average case time complexity: O(log N)
66
* Best case time complexity: O(1)
77
* Space complexity: O(1)
88
*/
99
function ternarySearch(arr, key){
10-
let left = 0;
11-
let right = arr.length - 1;
12-
while(left <= right){
13-
let temp2 = left + Math.floor((right - left) / 3);
14-
let temp3 = left + 2 * Math.floor((right - left) / 3);
15-
if(key == arr[left]){
16-
return left;
17-
} else if(key == arr[right]){
18-
return right;
19-
} else if(key < arr[left] || key > arr[right]){
20-
return null;
21-
} else if(key <= arr[temp2]){
22-
right = temp2;
23-
} else if(key > arr[temp2] && key <= arr[temp3]){
24-
left = temp2 + 1;
25-
right = temp3;
10+
let low = 0;
11+
let high = arr.length - 1;
12+
while(low <= high){
13+
let lowMiddle = low + Math.floor((high - low) / 3);
14+
let highMiddle = low + 2 * Math.floor((high - low) / 3);
15+
if(key == arr[low]){
16+
return low;
17+
} else if(key == arr[high]){
18+
return high;
19+
} else if(key <= arr[lowMiddle]){
20+
high = lowMiddle;
21+
} else if(key > arr[lowMiddle] && key <= arr[highMiddle]){
22+
low = lowMiddle + 1;
23+
high = highMiddle;
2624
} else {
27-
left = temp3 + 1;
25+
low = highMiddle + 1;
2826
}
2927
}
3028
return null;
3129
}
3230

3331
function ternarySearchRecursive(arr, low, high, key){
34-
35-
if(high >= low){
32+
if(high > low){
3633
let highMiddle = low + 2 * Math.floor((high - low) / 3);
3734
let lowMiddle = low + Math.floor((high - low) / 3);
3835
if(key === arr[lowMiddle]){
3936
return lowMiddle;
4037
} else if(key === arr[highMiddle]){
4138
return highMiddle;
42-
} else if(key < arr[highMiddle]){
43-
return ternarySearchRecursive(arr, low, lowMiddle, key);
39+
} else if(key === arr[high]){
40+
return high;
41+
} else if(key < arr[lowMiddle]){
42+
return ternarySearchRecursive(arr, low, lowMiddle - 1, key);
4443
} else if(key > arr[lowMiddle] && key < arr[highMiddle]){
45-
return ternarySearchRecursive(arr, lowMiddle, highMiddle, key);
46-
} else if(arr.indexOf(key) == - 1){
47-
return null;
44+
return ternarySearchRecursive(arr, lowMiddle + 1, highMiddle - 1, key);
4845
} else {
49-
return ternarySearchRecursive(arr, highMiddle, high, key);
46+
return ternarySearchRecursive(arr, highMiddle + 1, high, key);
5047
}
5148
}
5249
return null;

0 commit comments

Comments
 (0)