From 6c79e4d908d459ea2c519a1a796a50e36eb5f21b Mon Sep 17 00:00:00 2001 From: Sahil Malik Date: Sat, 16 Oct 2021 14:58:12 +0530 Subject: [PATCH] Create Ternary_search.c Adding ternary search algo --- C/Ternary_search.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 C/Ternary_search.c diff --git a/C/Ternary_search.c b/C/Ternary_search.c new file mode 100644 index 0000000..6cdb975 --- /dev/null +++ b/C/Ternary_search.c @@ -0,0 +1,85 @@ +// C program to illustrate +// recursive approach to ternary search + +#include + +// Function to perform Ternary Search +int ternarySearch(int l, int r, int key, int ar[]) +{ + if (r >= l) { + + // Find the mid1 and mid2 + int mid1 = l + (r - l) / 3; + int mid2 = r - (r - l) / 3; + + // Check if key is present at any mid + if (ar[mid1] == key) { + return mid1; + } + if (ar[mid2] == key) { + return mid2; + } + + // Since key is not present at mid, + // check in which region it is present + // then repeat the Search operation + // in that region + + if (key < ar[mid1]) { + + // The key lies in between l and mid1 + return ternarySearch(l, mid1 - 1, key, ar); + } + else if (key > ar[mid2]) { + + // The key lies in between mid2 and r + return ternarySearch(mid2 + 1, r, key, ar); + } + else { + + // The key lies in between mid1 and mid2 + return ternarySearch(mid1 + 1, mid2 - 1, key, ar); + } + } + + // Key not found + return -1; +} + +// Driver code +int main() +{ + int l, r, p, key; + + // Get the array + // Sort the array if not sorted + int ar[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + + // Starting index + l = 0; + + // length of array + r = 9; + + // Checking for 5 + + // Key to be searched in the array + key = 5; + + // Search the key using ternarySearch + p = ternarySearch(l, r, key, ar); + + // Print the result + printf("Index of %d is %d\n", key, p); + + // Checking for 50 + + // Key to be searched in the array + key = 50; + + // Search the key using ternarySearch + p = ternarySearch(l, r, key, ar); + + // Print the result + printf("Index of %d is %d", key, p); +}