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