diff options
Diffstat (limited to 'examples/21.pry')
| -rw-r--r-- | examples/21.pry | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/examples/21.pry b/examples/21.pry new file mode 100644 index 0000000..fb30960 --- /dev/null +++ b/examples/21.pry @@ -0,0 +1,78 @@ +extern rand = () => i64; +extern malloc = (i64) => *void; +extern free = (*void) => void; + +import "!stdlib.pry"; + +let init_array = (n: i64, arr: *i64) => void { + let i = 0; + while i < n { + (*(arr + cast(*i64, i))) = rand(); + i = i + 1; + }; + return; +}; + +let print_array = (n: i64, arr: *i64) => void { + let i = 0; + while i < n { + printf("%d\n", *(arr + cast(*i64, i))); + i = i + 1; + }; + return; +}; + +let sort_array = (n: i64, arr: *i64) => void { + let i = 0; + let j = 0; + + while i < n { + j = i + 1; + while j < n { + let x = *(arr + cast(*i64, i)); + let y = *(arr + cast(*i64, j)); + + if x > y { + let tmp = *(arr + cast(*i64, i)); + (*(arr + cast(*i64, i))) = *(arr + cast(*i64, j)); + (*(arr + cast(*i64, j))) = tmp; + }; + + j = j + 1; + }; + i = i + 1; + }; + + return; +}; + +let main = () => i64 { + let n = 10; + let arr = cast(*i64, malloc(n * 8)); + init_array(n, arr); + + printf("Pre-sorted:\n"); + print_array(n, arr); + + sort_array(n, arr); + + printf("Sorted:\n"); + print_array(n, arr); + + free(cast(*void, arr)); + + return 0; +}; + +/* + +Expected stdout: + +Pre-sorted: +${UNSORTED_LIST} +Sorted: +${SORTED_LIST} + +Expected return: 0 + +*/ |