我正在开发一种通过字符串数组进行搜索的二进制搜索算法,但是,在搜索的某些时候,“ 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
但是,我无法在单词文件中找到单词“ administrate”。这是我得到的输出:
Mogitocia管理117467 1 氧化异常管理58733 1 Canacee管理29366 -1 区分行政44049 1 市政管理36707 1 晶状体给药33036 1 Castellanship管理31201 1 羧化酶管理30283 1 船长管理29824 1 罐头管理29595 1 蜜饯29480 1 取消管理29423 1 canalling管理29394 1 运河管理29380 1 卡丹犬管理29373 1 加拿大管理29369 -1 加拿大化管理29371 -1 加拿大化管理29372 -1
改变
value = self[mid] <=> val
到
value = midvalue <=> val
否则,您将使用un-downcased self[mid]
,因此自然'C'
会'a'
以ASCII出现在前面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句