0
我正在开发一种二进制搜索算法来搜索字符串数组,但是,在我的搜索中的某个点“Canacee”的评估比按字母顺序比“administrate”低。有人知道为什么会发生这种情况吗? 我的代码:比较字符串在红宝石中的字符串出错
class Array
def binary_search(val, low=0, high=(length - 1))
return false if high < low
mid = (low + high)/2
midvalue = self[mid].downcase.strip
value = self[mid] <=> val
printf "%s \t %s \t %d \t %d\n", midvalue, val, mid, value
case
when value==0 then return true
when value > 0 then binary_search(val, low, mid-1)
when value < 0 then binary_search(val, mid+1, high)
end
end
end
path = ARGV.length > 0 ? ARGV[0] : '/words'
entries = File.read(path).split("\n")
if entries.binary_search("administrate")
printf "yes"
else
printf "no"
end
但是,我无法找到的单词“管理金融”,这是在Word文件。 这是输出我得到:
mogitocia administrate 117467 1 dysoxidation administrate 58733 1 canacee administrate 29366 -1 counterdistinction administrate 44049 1 citification administrate 36707 1 cetomorphic administrate 33036 1 castellanship administrate 31201 1 carboxylase administrate 30283 1 capelet administrate 29824 1 cankery administrate 29595 1 candied administrate 29480 1 cancelation administrate 29423 1 canalling administrate 29394 1 canalage administrate 29380 1 canadine administrate 29373 1 canadian administrate 29369 -1 canadianization administrate 29371 -1 canadianize administrate 29372 -1
您还需要提供您的输入。 –
另外,如果有散列可用,则不要在数组上使用二进制搜索。散列总是会赢。 –
另外,您可能有兴趣知道ruby 2.0有一个内置的数组搜索方法:'ary.bsearch {| x | “管理”<=> x}' – pje