排序好的数组:1,2,3,4,5,6,7,经过旋转操作后(比如,4,5,6,7,1,2,3)求最大值???
#include<iostream> using namespace std; /*---------_旋转后的数组找最大值------------ 1,2,3,4,5,6,7; 5,6,7,1,2,3,4 7,1,2,3,4,5,6 */ void findmax(int *x,int N) { if(!x||!N) return; int i=0,j=N-1; while(i<j-2) //_剩两个时停止 //在"5,6,7","6,7,1" 的情况时,剩下两个不好处理,放到后面单独解决
{ if(x[(i+j)/2]>=x[i]) //大于等于时(i+j)/2 参与下一次计算 i=(i+j)/2; else j=(i+j)/2-1; //反之,(i+j)/2 不参与下一次计算 } cout<<(x[i]>x[j]?x[i]:x[j])<<endl; //剩下的两个中最大的一个 } void main() { int x[7]={5,6,7,1,2,3,4}; findmax(x,7); }
原文:http://www.cnblogs.com/shirishiyue/p/3985519.html