Luca Bruno blog

Bubble sort for prolog

Hello again,
this time I’ve found a version of bubble sort here. I wanted to provide my version, which is less iterative and, I think, more intuitive. What it does is, simply, bubble until it’s sorted:

bubblesort(L1, L2) :- bubblesort2(L1,L2,unsorted),!.  
bubblesort2(L,L,sorted).  
bubblesort2(L1,L2,unsorted) :- bubble(L1,L3,C), bubblesort2(L3,L2,C).  
bubble(\[\],\[\],sorted).  
bubble(\[X\],\[X\],sorted).  
bubble(\[X,Y|L\], \[X|L1\], C) :- X <= Y, bubble(\[Y|L\],L1,C).  
bubble(\[X,Y|L\], \[Y|L1\], unsorted) :- X \> Y, bubble(\[X|L\],L1,\_).  
  
Yes, the exam is tomorrow so I will finally stop annoying you readers ;)