Next: , Previous: Insertion sort list, Up: Changing structure


2.1.4.6 Bubble sort

C code Spl encoding
#include "intlist.h"

/* acyclic(x) and l[x]==_l and data(x) */
void bubbleSortArr(intlist x) {
  intlist xi, xin;
  int v;
  int k = 1;
  while (k==1) {
    k = 0;
    xi = x;
    xin = x->next;
    while (xi != NULL && xin != NULL) {
      if (xi->data >= xin->data+1) {
        v = xi->data;
	xi->data = xin->data;
        xin->data = v;
        k = 1;
      }
      xi = xin;
      xin = xin->next;
    }
  }
} 
var _data:real, _free:real, _len:real,
    _new:real, _next:real, _null:real,
    x:real, xi:real, xin:real,
    _l:int, _k:int, S:int, v:int;
begin
  assume (x == 0);
  xi = _null; xin = _null;
  _k = 1;
  while _k==1 do
    _k = 0;
    xi = x;
    xin = x * _next;
    while xi != _null and xin != _null do
      if (xi * _data >= xin * _data +1) then
        v = xi * _data;
        xi = (xin * _data) / _data;
        xin = v / _data;
        _k = 1;
      endif;
      xi = _null;
      xi = xin;
      xin = _null;
      xin = xi * _next;
    done;
    xi = _null;
    xin = _null;
  done;
end

Results

Domain Param. Log file Interesting constraint
LSUM-PRD Anon=(0,1) log/intlist-bubbleSortArr-lsum-prd-01 x(n1) and xi(n2) and xin(n3) and _l=l[n1]+l[n3]+1 and l[n2]=1 and S=S[n1]+S[n2]+S[n3]
LSUM-REL Anon=(0,1) log/intlist-bubbleSortArr-lsum-rel-01 x(n1) and xi(n2) and xin(n3) and _l=l[n1]+l[n3]+1 and l[n2]=1 and S=S[n1]+S[n2]+S[n3]
MSET TODO TODO TODO
UCONS TODO TODO x(n1) and xi(n2) and xin(n3) and \forall y1,y2\in n3 \implies d(y1)<=d(y2)