我试图通过选择未排序部分的最大值并将其放置在输出(已排序)列表的末尾来实现选择排序的自定义版本。 我对列表递归构建有问题。如何从右边开始构建输出列表?
sel_sort2([], []).
sel_sort2(L, R) :-
max_list(L, M),
delete1(M, L, L1),
append(R, [M], R),
sel_sort2(L1, R).
答案 0 :(得分:0)
您无需使用append
(如第一条评论中所述,这很可恶)。相反,您可以编写第二个子句,例如:
sel_sort2(L, [E|T]) :-
min(L, E),
del(L, E, L1),
sel_sort2(L1, T).
min
在输入列表中占最小元素,并且此元素在结果列表中的第一位置,而L1是L中的所有元素,而没有第一次出现给定元素。