完整的c语言代码。给定含有n个不同的数的数组L=<X1, X2 ,…,Xn>.如果L中存在Xi,使得X1<X2<…<Xi+1<Xi>Xi+1>...>Xn, , 则称L是单峰的,并称Xi是L的“峰顶”.假设L是单峰的,设计一个算法找到L的峰顶.
时间: 2024-05-09 15:19:38 浏览: 136
C语言数组部分代码,很全哦!
```
#include <stdio.h>
int findPeak(int arr[], int n) {
int left = 0, right = n - 1, mid;
while (left < right) {
mid = (left + right) / 2;
if (arr[mid] < arr[mid+1]) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 8, 6, 4, 2};
int n = sizeof(arr) / sizeof(int);
int peak = findPeak(arr, n);
printf("The peak is at index %d, value is %d.", peak, arr[peak]);
return 0;
}
```
算法思路:
由于是单峰数组,所以可以使用二分查找的思路。每次比较中间元素和其下一个元素的大小,如果中间元素小于下一个元素,说明峰顶一定在右侧,左指针移到 mid+1;如果中间元素大于等于下一个元素,说明峰顶一定在左侧,右指针移到 mid。
时间复杂度为 O(log n)。
阅读全文