summaryrefslogtreecommitdiff
path: root/chapter24/docs/examples/BubbleSort.smp
blob: 938e3181a28910c860e4ef66e214236350aa00a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// -*- mode: java;  -*-

// An implementation of
// https://sampleprograms.io/projects/bubble-sort/
//
// Bubble sort, with reading (parsing) and writing (formatting) the data.

val sort = { !sys.aryi64 nums ->
    var done = false;
    while( !done ) {
        done = true;
        for( var i = 0; i < nums.len-1; i++ )
            if( nums.buf[i] > nums.buf[i+1] ) {
                int tmp = nums.buf[i];
                nums.buf[i] = nums.buf[i+1];
                nums.buf[i+1] = tmp; // Swap
                done = false;
            }
    }
};

// Read from stdin a line of the form "[ 4, 3, 2, 1]" and print it sorted.
val main = { ->
    // Parse array of numbers from stdin
    var nums = sys.parseAryI64( sys.io.stdin() );
    if( !nums ) {
        sys.io.p("stdin must look like [4, 3, 2, 1]");
        return 1;
    }

    // Bubble sort array of integers
    sort(nums);

    // Print a list of numbers to stdout
    nums.str().write(1);
    return 0;
};