单峰排序
一.实验题目:
1.单峰序列
问题描述
给定含有n个不同整数的数组L=<a1,a2,…,an>,如果L中存在ai,使得a1<a2<…<ai-1ai+1>…>an。则称L是单峰的,并称ai是L的“峰顶”。假设L是单峰的,设计一个算法,找L的峰顶。
输入形式
一共包括两行,第一行一个整数N,表示数组中整数的个数。
接下来的一行中包含N个整数,以空格分隔
输出形式
如果这些整数中存在峰顶元素ai,则输出该元素的下标i,否则输出0
样例输入
9
1 2 5 7 9 8 6 4 3
样例输出
5
另一组样例:
输入:
9
3 5 6 2 9 8 7 4 1
输出:0
二. 分析:
利用分治和二分的算法,取每一个数组的中间值mid,若mid-1<mid<mid+1,则用递归向从mid-right寻找。若mid-1>mid>mid+1,则用递归向从left-mid寻找。若mid-1< mid >mid+1,则假定为正确值,寻找左右数组是否还存在峰值,如没有则正确,若有则不正确。
#include<iostream>
using namespace std;
int Maxnum(int list[], int left, int right){
//如果只有新数组两个元素返回0
if(left<