MATLABを使用して2分探索をするプログラムを書いたのでソースコードと使用方法を載せます。指定した配列の中から、指定した数値にもっとも近い数値を格納している配列番号を返しますプログラムです。
ソースコード
function[ans] = binarySearch(src,key)
left = 1;
right = length(src);
while 1
center = int16((left + right)/2);
if(left>=right)
break;
elseif(key>src(center))
left = center+1;
else
right = center-1;
end
end
if(left ~= right)
if(abs(src(left)-key)>=abs(src(right)-key))
ans=right;
else
ans=left;
end
else
if(left<length(src) && left>1)
if(abs(src(left)-key)>=abs(src(left+1)-key))
ans=left+1;
elseif(abs(src(left)-key)>=abs(src(left-1)-key))
ans=left-1;
else
ans=left;
end
elseif(left==length(src))
if(abs(src(left)-key)>=abs(src(left-1)-key))
ans=left-1;
else
ans=left;
end
else
if(abs(src(left)-key)>=abs(src(left+1)-key))
ans=left+1;
else
ans=left;
end
end
end
end
使用方法
binarySearch(探索する配列, 探索する数値);
使用例
>x=[1 8 13 25 31 38 47 55 64 71];
>v=53;
>binarySearch(x,v);
ans=
8
>x(binarySearch(x,v));
ans=
55