第二章 :查找与排序-------2.18题目讲解_在有空字符串中的有序字符串数组中查找
在有空字符串中的有序字符串数组中查找:
#include<iostream>
using namespace std;
int indexOf(string arr[],string p,int length){
int begin=0;
int end=length-1;
// 可能取到等号,begin、end相邻,正确解在end,indexOfMid指向begin所指元素
//经过循环,begin+1,与end重合,仍可进入循环求得正确解
while(begin<=end){
int indexOfMid=begin+((end-begin)>>1);
while(arr[indexOfMid].compare("")==0){
indexOfMid++;
//千万注意! => begin、end、indexOfMid指向同一个元素的时候
if(indexOfMid>end) return -1;
}
if(arr[indexOfMid].compare(p)>0){
end=indexOfMid-1;
}
else if(arr[indexOfMid].compare(p)<0){
begin=indexOfMid+1;
}
else{
return indexOfMid;
}
}
return -1;
}
int main(){
string arr[]={"a","","ac","","ad","b","","ba"};
int res=indexOf(arr,"b",8);
cout<<res<<endl;
cout<<indexOf(arr,"c",8);
return 0;
}