【发布时间】:2019-12-12 03:43:56
【问题描述】:
我一直在尝试学习 prolog,我想使用列表的第二个元素作为快速排序的枢轴。
我想用 [Head | [枢轴| Tail] ] 作为方法中的输入会起作用,但是我不确定我可以在哪里放置“Head”,即第一个元素。
像这样:
qsort([],[]):- !.
qsort([Head|[Pivot|Tail]],Sorted):-
split(Pivot,[Head|Tail],Less,Greater),
qsort(Less,SortedLess),
qsort(Greater,SortedGreater),
append(SortedLess,[Pivot|SortedGreater],Sorted).
split(_,[],[],[]).
split(Pivot,[X|T],[X|Less],Greater):-
X=<Pivot,split(Pivot,T,Less,Greater).
split(Pivot,[X|T],Less,[X|Greater]):-
X>Pivot,split(Pivot,T,Less,Greater).
但是,当我尝试使用 qsort([8, 3, 4, 12, 25, 4, 6, 1, 9, 22, 6], Sorted). 对列表进行排序时,它只会返回 false。我做错了什么?
【问题讨论】:
-
您没有考虑使用 one 元素对列表进行排序。该列表与
[Head|[Pivot|Tail]]不匹配。