4-2 我写了两个,一个找到第一个相等的,一个找到最后一个相等的
#include "stdafx.h"
#include <iostream>
using namespace std;
int BinarySearchLeast(int start, int end, int find, int* a );
int BinarySearchLarge(int start, int end, int find, int* a );
int main(int argc, char* argv[])
{
int a[1000];
for(int i = 0; i < 1000; i++)
a[i] = i;
a[99] = 100;
a[101] = 100;
cout<<BinarySearchLeast(0,999,100,a)<<endl;
cout<<BinarySearchLarge(0,999,100,a)<<endl;
return 0;
}
int BinarySearchLeast(int start, int end, int find, int* a )
{
int mid;
while((start+1)!=end)
{
mid = (start + end)/2;
if(a[mid] < find)
start = mid;
else
end = mid;
}
if(a[end] == find)
return end;
else
return -1;
}
int BinarySearchLarge(int start, int end, int find, int* a )
{
int mid;
while((start+1)!=end)
{//assert: start <=find < end
mid = (start + end)/2;
if(a[mid] > find)
end = mid;
else
start = mid;
}
if(a[start] == find)
return start;
else
return -1;
}