Sorting algorithms/Bubble sort: Difference between revisions

Content added Content deleted
(Add Shen solution)
(Add Shen solution)
Line 4,074: Line 4,074:
Original source: [http://seed7.sourceforge.net/algorith/sorting.htm#bubbleSort]
Original source: [http://seed7.sourceforge.net/algorith/sorting.htm#bubbleSort]
=={{header|Shen}}==
=={{header|Shen}}==
<lang shen>(tc +)

(define swap
{ (vector number) --> number --> number --> (vector number) }
A I1 I2 -> (let Z (<-vector A I1)
(do (vector-> A I1 (<-vector A I2))
(vector-> A I2 Z))))

(define one-pass
{ (vector number) --> number --> boolean --> number --> boolean }
A N Swapped N -> Swapped
A N Swapped I -> (if (> (<-vector A (- I 1)) (<-vector A I))
(do (swap A (- I 1) I)
(one-pass A N true (+ I 1)))
(one-pass A N Swapped (+ I 1))))

(define bubble-h
{ boolean --> (vector number) --> number --> (vector number) }
true A N -> (bubble-h (one-pass A N false 2) A N)
false A N -> A)

(define bubble-sort
{ (vector number) --> (vector number) }
A -> (let N (limit A)
(bubble-h (one-pass A N false 2) A N)))

(datatype some-globals

__________
(value *arr*) : (vector number);)

(set *arr* (vector 5))
(vector-> (value *arr*) 1 5)
(vector-> (value *arr*) 2 1)
(vector-> (value *arr*) 3 4)
(vector-> (value *arr*) 4 2)
(vector-> (value *arr*) 5 8)
(bubble-sort (value *arr*))</lang>


=={{header|Sidef}}==
=={{header|Sidef}}==