Sorting algorithms/Bubble sort: Difference between revisions

Content added Content deleted
(→‎{{header|Prolog}}: alternative version)
Line 2,719: Line 2,719:
-> [1,2,3,4,4,5,6,8,9]
-> [1,2,3,4,4,5,6,8,9]
true.</pre>
true.</pre>
===Alternative version===
Should be ISO (but tested only with GNU Prolog).
Note: doesn't constuct list for each swap, only for each pass.
<lang prolog>:- initialization(main).


bubble_sort(Xs,Res) :-
write(Xs), nl
, bubble_pass(Xs,Ys,Changed)
, ( Changed == true -> bubble_sort(Ys,Res) ; Res = Ys )
.

bubble_pass(Xs,Res,Changed) :-
Xs = [X|Ys], Ys = [Y|Zs]
, ( X > Y -> H = Y, T = [X|Zs], Changed = true
; H = X, T = Ys
)
, Res = [H|R], bubble_pass(T,R,Changed)
; Res = Xs
.


test([8,9,1,3,4,2,6,5,4]).

main :- test(T), bubble_sort(T,_), halt.</lang>
{{Output}}
<pre>[8,9,1,3,4,2,6,5,4]
[8,1,3,4,2,6,5,4,9]
[1,3,4,2,6,5,4,8,9]
[1,3,2,4,5,4,6,8,9]
[1,2,3,4,4,5,6,8,9]</pre>


=={{header|PureBasic}}==
=={{header|PureBasic}}==