顺序查找
充分利用 Haskell 的列表推导式,可以大大简化代码:
find x list = [(n,y) | (n,y) <- zip [0.. ] list, y == x]
>>find 5 [1,2,3,4,5,0,1,2,3,4,5,6,7,8,9]
[(4,5),(10,5)]
二分查找
利用哨位,可以避免一大坨 if else 嵌套。同时,where 指令结合哨位,也可以写出比较简单容易看明白的函数逻辑。
find2 x list
| list == [] = -1
| x < b = find2 x list1
| x > b = if k >= 0 then m + 1 + k else -1
| otherwise = m
where
m = length(list) `div` 2
list1 = take m list
b = list !! m
list2 = drop (m + 1) list
k = find2 x list2
>>find2 55 [0,1,2,3,4,5,6,7,8,9]
-1
>>find2 5 [0,1,2,3,4,5,6,7,8,9]
5
本文介绍如何使用Haskell语言实现顺序查找和二分查找算法。通过列表推导式简化顺序查找的代码实现,并利用哨位避免复杂的条件判断来优化二分查找。
1132

被折叠的 条评论
为什么被折叠?



