Created
March 4, 2015 09:36
-
-
Save timakin/dd4fdf71801d5a7d2617 to your computer and use it in GitHub Desktop.
文系が学ぶコンピューターサイエンス╭( ・ㅂ・)و ̑̑:第8回【リニアサーチ、バイナリサーチ】 ref: http://qiita.com/timakin/items/f4121db6f7dadb0472c2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// バイナリサーチ(2分探索) | |
// 基準点の前後を分けて探ることで、計算量をO(logN)に抑えることができる。 | |
// バイナリサーチはあたいの大小を元に捜索するため、対象がソート済みの配列でなくてはならない。 | |
binarySearch: function(data, target) { | |
var left = 0, | |
right = data.length - 1, | |
middle; | |
while(left <= right) { | |
// 基準点を毎回更新する。 | |
// これより大きいか小さいかで、前後のどちら半分の配列を探索するか決める | |
// mid = Math.floor((left + right) / 2); // 通常の基準点の決め方 | |
mid = ((left+right) >> 1); // ビット演算子で右シフトすれば半分になる。これでおよそ倍速。 | |
// 基準点以上のどこかに探したい値がある | |
// 基準点との大小関係を元に配列を分割するので、 | |
// そもそもソート済みじゃないと、分割する意味がないので注意。 | |
if (data[mid] < target) { | |
left = mid + 1; | |
// 基準点以下のどこかに探したい値がある | |
} else if (data[mid] > target) { | |
right = mid - 1; | |
} else { | |
// もしleftとrightが一致したら、目当てのものがみつかったので終了。 | |
return mid; | |
} | |
} | |
// 見つからなかったら-1を返す。 | |
return -1; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
linearSearch: function(data, target) { | |
// 先頭から一直線に、一致する引数を探して行って、 | |
// もし一致するものがない場合は-1を返す。 | |
for(item in data) { | |
if(target === data[item]) { | |
return item; | |
} | |
} | |
return -1; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment