/*
 * compile with command:
 * $ gcc bubble_sort.c ../hdr.c
 */

#include <stdio.h>
#include <stdlib.h>
#include "../hdr.h"         // NELEMS, print_array(), swap()
                            // implemented in ../hdr.c

void bubble_sort(int numbers[], int n);

int
main(int argc, char *argv[])
{
    int numbers[] = {10, 6, 25, 32, 4, 69, 54, 7, 13};
    int n;

    n = NELEMS(numbers);
    print_array(numbers, n);
    bubble_sort(numbers, n);
    print_array(numbers, n);

    exit(0);
}

void
bubble_sort(int numbers[], int n)
{
    int i;          // find i'th greater number
    int j;          // index for traversing sub-array
    int temp;       // temporary variable for swapping two numbers.
    int swapped;    // in last loop a swap ocurred?

    for (i = n-1; i > 0; i--) {                 // |
        swapped = 0;                            // |
                                                // |
        for (j = 0; j < i; j++)                 // |
            if (numbers[j] > numbers[j+1]) {    // |
                swap(numbers, j, j+1);          // | main bubble sort algorithm
                swapped = 1;                    // |
            }                                   // |
                                                // |
        if (!swapped)                           // |
            break;                              // |
    }                                           // |
}
