首页 > 解决方案 > 使用最大值进行选择排序

问题描述

我正在尝试通过选择未排序部分的最大值并将其放在输出(排序)列表的末尾来实现自定义版本的选择排序。我对列表递归构建有疑问。如何从右侧开始构建输出列表?

sel_sort2([], []).
sel_sort2(L, R) :-
    max_list(L, M),
    delete1(M, L, L1),
    append(R, [M], R),
    sel_sort2(L1, R).

标签: prolog

解决方案


您不需要使用append(正如第一条评论中指出的那样是可疑的)。相反,您可以编写第二个子句,例如:

sel_sort2(L, [E|T]) :-
    min(L, E),
    del(L, E, L1),
    sel_sort2(L1, T).

wheremin取输入列表中的最小元素,并且该元素位于结果列表中的第一个位置,L1 是 L 中没有第一次出现给定元素的所有元素。


推荐阅读