Bend/examples/bubble_sort.bend

46 lines
989 B
Plaintext
Raw Normal View History

2024-05-15 22:26:16 +03:00
# Sorts a list
def sort(xs):
match xs:
case List/Nil:
return List/Nil
case List/Cons:
return insert(xs.head, sort(xs.tail))
2024-04-11 20:17:46 +03:00
2024-05-15 22:26:16 +03:00
# Insert : U60 -> List -> List
def insert(v, xs):
match xs:
case List/Nil:
return List/Cons(v, List/Nil)
case List/Cons:
return swap_gt(v, xs.head, xs.tail)
2024-04-11 20:17:46 +03:00
2024-05-15 22:26:16 +03:00
# SwapGT : U60 -> U60 -> U60 -> List -> List
def swap_gt(v, x, xs):
if x > v:
return List/Cons(v, List/Cons(x, xs))
else:
return List/Cons(x, insert(v, xs))
2024-04-11 20:17:46 +03:00
# Generates a list of 'n' random u24 numbers using xorshift
def rnd(n):
bend n, state=1:
when n != 0:
state = state ^ (state << 13)
state = state ^ (state >> 17)
state = state ^ (state << 5)
return List/Cons(state % 100, fork(n - 1, state))
else:
return List/Nil
2024-04-11 20:17:46 +03:00
# Sums a list of u24 numbers
def sum(xs):
fold xs:
case List/Nil:
return 0
case List/Cons:
return xs.head + xs.tail
2024-04-11 20:17:46 +03:00
def main:
n = 100
return sum(sort(rnd(n)))