erlang 选择排序
时间: 2023-12-14 20:32:18 浏览: 33
以下是Erlang实现选择排序的代码和解释:
```erlang
selection_sort(List) ->
selection_sort(List, []).
selection_sort([], Acc) ->
Acc;
selection_sort(List, Acc) ->
{Min, Rest} = find_min(List),
selection_sort(Rest, [Min | Acc]).
find_min([H | T]) ->
find_min(T, H, []).
find_min([], Min, Rest) ->
{Min, Rest};
find_min([H | T], Min, Rest) when H < Min ->
find_min(T, H, [Min | Rest]);
find_min([H | T], Min, Rest) ->
find_min(T, Min, [H | Rest]).
```
这里的选择排序算法使用了递归的方式实现。`selection_sort/1`函数是对外暴露的接口,它调用了`selection_sort/2`函数,并将一个空列表作为累加器传递给它。`selection_sort/2`函数有两个参数,第一个参数是待排序的列表,第二个参数是累加器。当待排序的列表为空时,`selection_sort/2`函数返回累加器。否则,它调用`find_min/1`函数查找列表中的最小元素,并将其插入到累加器的头部。然后,它递归调用自身,将剩余的元素和更新后的累加器作为参数传递给自己。
`find_min/1`函数用于查找列表中的最小元素。它调用了`find_min/3`函数,并将第一个元素作为初始最小值传递给它。`find_min/3`函数有三个参数,第一个参数是待查找的列表,第二个参数是当前的最小值,第三个参数是一个累加器,用于存储比当前最小值小的元素。当待查找的列表为空时,`find_min/3`函数返回当前的最小值和累加器。否则,它比较当前元素和当前最小值的大小,如果当前元素比当前最小值小,则将当前元素作为新的最小值,并将当前最小值插入到累加器的头部。然后,它递归调用自身,将剩余的元素、新的最小值和更新后的累加器作为参数传递给自己。