1. 程式人生 > >單峰問題分治法演算法(C++實現)

單峰問題分治法演算法(C++實現)

給定含有n個不同的陣列成的陣列L=<x1,x2,x3,…,xn>,如果L中存在xi使得,則稱x1<x2 <…<xi-1<xi且xi>xi+1>…>xn則稱L是單峰的,並稱xi是L的峰頂。假設L是單峰的,設計演算法找到L的峰頂。 將n個元素的陣列分為差不多大的兩個n/2的陣列; 根據分界線,直接淘汰掉一半,縮小範圍。

程式碼實現:(時間複雜度:O(log(2)(n)

#include<iostream>
using namespace std;
int Peak(int a[],int left,int right)
{
	if(left==right) return left;
	int mid=(left+right)/2;
	if(a[mid]<a[mid+1]&&a[mid-1]<a[mid]) return Peak(a,mid,right);
	else if(a[mid]>a[mid+1]&&a[mid-1]>a[mid]) return Peak(a,left,mid); 
	else if(a[mid]>a[mid-1]&&a[mid]>a[mid+1]) return mid;
	else return -1;	 
}

int main()
{
	int a[]={1,2,3,4,5,4,2,1};
	cout<<Peak(a,0,7)<<endl;
	return 0;
}