Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 2 additions & 2 deletions
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‎

Lines changed: 23 additions & 26 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /