#include <stdio.h>
// Ternary search algorithm to return the position of
// target x in the array A of size N
int TernarySearch(int arr[], int n, int x)
{
int low = 0, high = n - 1;
while (low <= high)
{
int left_mid = low + (high - low) / 3;
int right_mid = high - (high - low) / 3;
// int left_mid = (2*low + high)/3;
// int right_mid = (low + 2*high)/3;
if (arr[left_mid] == x)
return left_mid;
else if (arr[right_mid] == x)
return right_mid;
else if (arr[left_mid] > x)
high = left_mid - 1;
else if (arr[right_mid] < x)
low = right_mid + 1;
else
low = left_mid + 1, high = right_mid - 1;
}
return -1;
}
// Ternary Search vs Binary search
int main(void)
{
int A[] = { 2, 5, 6, 8, 9, 10 };
int target = 6;
int n = sizeof(A) / sizeof(A[0]);
int index = TernarySearch(A, n, target);
if (index != -1)
printf("Element found at index %d", index
); else
printf("Element not found in the array");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBUZXJuYXJ5IHNlYXJjaCBhbGdvcml0aG0gdG8gcmV0dXJuIHRoZSBwb3NpdGlvbiBvZgovLyB0YXJnZXQgeCBpbiB0aGUgYXJyYXkgQSBvZiBzaXplIE4KaW50IFRlcm5hcnlTZWFyY2goaW50IGFycltdLCBpbnQgbiwgaW50IHgpCnsKICAgIGludCBsb3cgPSAwLCBoaWdoID0gbiAtIDE7CgogICAgd2hpbGUgKGxvdyA8PSBoaWdoKQogICAgewogICAgICAgIGludCBsZWZ0X21pZCA9IGxvdyArIChoaWdoIC0gbG93KSAvIDM7CiAgICAgICAgaW50IHJpZ2h0X21pZCA9IGhpZ2ggLSAoaGlnaCAtIGxvdykgLyAzOwoKICAgICAgICAvLyBpbnQgbGVmdF9taWQgPSAoMipsb3cgKyBoaWdoKS8zOwogICAgICAgIC8vIGludCByaWdodF9taWQgPSAobG93ICsgMipoaWdoKS8zOwoKICAgICAgICBpZiAoYXJyW2xlZnRfbWlkXSA9PSB4KQogICAgICAgICAgICByZXR1cm4gbGVmdF9taWQ7CgogICAgICAgIGVsc2UgaWYgKGFycltyaWdodF9taWRdID09IHgpCiAgICAgICAgICAgIHJldHVybiByaWdodF9taWQ7CgogICAgICAgIGVsc2UgaWYgKGFycltsZWZ0X21pZF0gPiB4KQogICAgICAgICAgICBoaWdoID0gbGVmdF9taWQgLSAxOwoKICAgICAgICBlbHNlIGlmIChhcnJbcmlnaHRfbWlkXSA8IHgpCiAgICAgICAgICAgIGxvdyA9IHJpZ2h0X21pZCArIDE7CgogICAgICAgIGVsc2UKICAgICAgICAgICAgbG93ID0gbGVmdF9taWQgKyAxLCBoaWdoID0gcmlnaHRfbWlkIC0gMTsKICAgIH0KCiAgICByZXR1cm4gLTE7Cn0KCi8vIFRlcm5hcnkgU2VhcmNoIHZzIEJpbmFyeSBzZWFyY2gKaW50IG1haW4odm9pZCkKewogICAgaW50IEFbXSA9IHsgMiwgNSwgNiwgOCwgOSwgMTAgfTsKICAgIGludCB0YXJnZXQgPSA2OwoKICAgIGludCBuID0gc2l6ZW9mKEEpIC8gc2l6ZW9mKEFbMF0pOwogICAgaW50IGluZGV4ID0gVGVybmFyeVNlYXJjaChBLCBuLCB0YXJnZXQpOwoKICAgIGlmIChpbmRleCAhPSAtMSkKICAgICAgICBwcmludGYoIkVsZW1lbnQgZm91bmQgYXQgaW5kZXggJWQiLCBpbmRleCk7CiAgICBlbHNlCiAgICAgICAgcHJpbnRmKCJFbGVtZW50IG5vdCBmb3VuZCBpbiB0aGUgYXJyYXkiKTsKCiAgICByZXR1cm4gMDsKfQ==