#include <stdio.h>
// Recusive function to find peak in the array
int findPeakElement(int A[], int low, int high, int n)
{
// find mid element
int mid = (low + high) / 2;
// check if mid element is greater than its neighbors
if ((mid == 0 || A[mid - 1] <= A[mid]) &&
(mid == n - 1 || A[mid + 1] <= A[mid]))
return mid;
// If the left neighbor of mid is greater than the mid element,
// then find the peak recursively in the left sub-array
if (mid - 1 >= 0 && A[mid - 1] > A[mid])
return findPeakElement(A, low, mid - 1, n);
// If the right neighbor of mid is greater than the mid element,
// then find the peak recursively in the right sub-array
return findPeakElement(A, mid + 1, high, n);
}
// main function
int main(void)
{
int A[] = { 8, 9, 10, 2, 5, 6 };
int n = sizeof(A) / sizeof(A[0]);
int index = findPeakElement(A, 0, n - 1, n);
printf("The peak element is %d", A
[index
]);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBSZWN1c2l2ZSBmdW5jdGlvbiB0byBmaW5kIHBlYWsgaW4gdGhlIGFycmF5CmludCBmaW5kUGVha0VsZW1lbnQoaW50IEFbXSwgaW50IGxvdywgaW50IGhpZ2gsIGludCBuKQp7CiAgICAvLyBmaW5kIG1pZCBlbGVtZW50CiAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKCiAgICAvLyBjaGVjayBpZiBtaWQgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gaXRzIG5laWdoYm9ycwogICAgaWYgKChtaWQgPT0gMCB8fCBBW21pZCAtIDFdIDw9IEFbbWlkXSkgJiYKICAgICAgICAobWlkID09IG4gLSAxIHx8IEFbbWlkICsgMV0gPD0gQVttaWRdKSkKICAgICAgICByZXR1cm4gbWlkOwoKICAgIC8vIElmIHRoZSBsZWZ0IG5laWdoYm9yIG9mIG1pZCBpcyBncmVhdGVyIHRoYW4gdGhlIG1pZCBlbGVtZW50LAogICAgLy8gdGhlbiBmaW5kIHRoZSBwZWFrIHJlY3Vyc2l2ZWx5IGluIHRoZSBsZWZ0IHN1Yi1hcnJheQogICAgaWYgKG1pZCAtIDEgPj0gMCAmJiBBW21pZCAtIDFdID4gQVttaWRdKQogICAgICAgIHJldHVybiBmaW5kUGVha0VsZW1lbnQoQSwgbG93LCBtaWQgLSAxLCBuKTsKCiAgICAvLyBJZiB0aGUgcmlnaHQgbmVpZ2hib3Igb2YgbWlkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWlkIGVsZW1lbnQsCiAgICAvLyB0aGVuIGZpbmQgdGhlIHBlYWsgcmVjdXJzaXZlbHkgaW4gdGhlIHJpZ2h0IHN1Yi1hcnJheQogICAgcmV0dXJuIGZpbmRQZWFrRWxlbWVudChBLCBtaWQgKyAxLCBoaWdoLCBuKTsKfQoKLy8gbWFpbiBmdW5jdGlvbgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgQVtdID0geyA4LCA5LCAxMCwgMiwgNSwgNiB9OwogICAgaW50IG4gPSBzaXplb2YoQSkgLyBzaXplb2YoQVswXSk7CgogICAgaW50IGluZGV4ID0gZmluZFBlYWtFbGVtZW50KEEsIDAsIG4gLSAxLCBuKTsKICAgIHByaW50ZigiVGhlIHBlYWsgZWxlbWVudCBpcyAlZCIsIEFbaW5kZXhdKTsKCiAgICByZXR1cm4gMDsKfQ==