使用最大的选择排序

时间:2019-01-13 12:03:41

标签: prolog

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

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

1 个答案:

答案 0 :(得分:0)

您无需使用append(如第一条评论中所述,这很可恶)。相反,您可以编写第二个子句,例如:

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

min在输入列表中占最小元素,并且此元素在结果列表中的第一位置,而L1是L中的所有元素,而没有第一次出现给定元素。