我必须实现冒泡排序功能(排序算法)。
我已经实施了bubblesort
and swap
,一个帮助函数bubblesort
:
swap([X,Y|T1],[Y,X|T1]):-(Y<X,!).
swap([X|T1],[X|T2]):- swap(T1,T2).
bubblesort([],[]) :- !.
bubblesort(T1,T2) :- (bubblesort(swap(T1,T2),T2)).
我得到一个无限循环。我必须保留函数的签名:
冒泡排序(T1,T2)
我在这个问题上纠结了2个小时。有谁知道我该怎么做?
直到交换过程没有变化为止,继续交换。如果交换没有变化,那么您已经对列表进行了排序。
bubblesort ( List, SortedList) :-
swap ( List, List1 ), ! ,
bubblesort ( List1, SortedList) .
bubblesort ( List, List).
swap ( [ X, Y | Rest ], [ Y, X | Rest ] ) :-
X > Y, ! .
swap ( [ Z | Rest ], [ Z | Rest1 ] ) : -
swap (Rest, Rest1 ).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)