帮我用C写一个寻峰算法
时间: 2023-06-05 18:05:45 浏览: 106
非常荣幸能够为您提供帮助。以下是C语言版的寻峰算法示例代码,希望对你有所帮助:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n; // 数组长度
printf("请输入数组的长度:");
scanf("%d", &n);
int* a = (int*) malloc(n * sizeof(int)); // 动态分配内存
printf("请输入数组元素:\n");
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
int peak = findPeak(a, n);
printf("数组的峰值为:%d\n", peak);
free(a); // 释放内存
return 0;
}
// 寻峰算法
int findPeak(int* a, int n)
{
int left = 0;
int right = n - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if((mid == 0 || a[mid] >= a[mid - 1]) && (mid == n - 1 || a[mid] >= a[mid + 1]))
{
// 找到峰值
return a[mid];
}
else if(mid > 0 && a[mid - 1] > a[mid])
{
// 左侧存在峰值,向左二分查找
right = mid - 1;
}
else
{
// 右侧存在峰值,向右二分查找
left = mid + 1;
}
}
// 未找到峰值
return -1;
}
```
希望这段代码能够帮助你完成你的任务。如有疑问或其他需要帮助的地方,随时向我提问哦。
阅读全文