Sorting
Here is a Hop program that pushes 20 random floats onto a vector, sorts
the vector and prints the sorted floats:
import struct std::vector::{Vector}
import std::vector::{new_vector free push pop len set get}
import std::prelude::{swap rot}
fn sort_vector let vector: *Vector[float] {
vector len
let len {
for 0 to len {
let i for 0 to len swap - 1 - {
if (get(vector, i) > get(vector, i + 1)) {
vector i i 1 + swap_values
}
}
}
}
}
fn swap_values let vector: *Vector[float] i: int j: int {
vector i get
vector i vector j get set
vector j rot set
}
fn main {
new_vector[float] call
let _ for 0 to 20 {
@ random push
}
@ sort_vector
let _ for 0 to 20 {
@ pop putln
}
free
}
When I ran this code, I got the following output:
$ chop sorting.hop
$ clang -o out out.c
$ ./out
0.984995500650257
0.975773698184639
0.922811361029744
0.865170631557703
0.828553025610745
0.819387137424201
0.779078703373671
0.690552048850805
0.686372652184218
0.490707924123853
0.439625101163983
0.418656431138515
0.358641421422362
0.328084589913487
0.29020162159577
0.273296257480979
0.272030772641301
0.117705243639648
0.0211979113519192
0.0145168676972389