val N:ℕ; val M:ℕ; type index = ℤ[-N,N]; type elem = ℤ[-M,M]; type array = Array[N,elem]; proc maximum(a:array, n:index): index { var p:index ≔ n-1; var m:elem ≔ a[p]; var i:index ≔ p-1; while i ≥ 0 do { if a[i] > m then { p ≔ i; m ≔ a[p]; } i ≔ i-1; } return p; } proc sort(a:array, n:index): array { var b:array ≔ a; var i:index ≔ n; while i > 1 do { var j:index ≔ maximum(b, i); i ≔ i-1; if i ≠ j then { var e:elem ≔ b[i]; b[i] ≔ b[j]; b[j] ≔ e; } } return b; }