#include <stdio.h>

/*
    Bubble sort.
    Vidi funkciju bubble_sort (sve ostale funkcije su pomocne). Unutar nje mozete zakomentirati poziv funkcije detaljni_ispis.

    Ideja:
        Sve dok niz nije sortiran:
            Nadji i takav da je x[i+1] > x[i] i zamijeni x[i] sa x[i+1].
            Ako ne nadjes takav i, onda je niz sortiran.
*/ 

void ispis( char poruka[], int x[], int n )
{
    printf( "%s\n", poruka );

    int i;
    for( i = 0; i < n; ++i )
        printf( "%d ", x[i] );
    printf( "\n\n" );
}


void detaljni_ispis( int x[], int n, int i, int j, int zamjena )
{
    int k;
    for( k = 0; k < n; ++k )
        printf( "  %d   ", x[k] );

    printf( "\n" );

    for( k = 0; k < n; ++k )
        if( k == i )
            printf( " x[i] " );
        else if( k == j )
            printf( "x[i+1]" );
        else
            printf( "      " );

    if( zamjena )
        printf( "   ZAMJENA! ...Pritisni enter..." );
    else
        printf( "            ...Pritisni enter..." );
    scanf( "%*c" );

    printf( "\n\n" );
}


void bubble_sort( int x[], int n )
{
    int sortiran, i;

    sortiran = 0;
    while( !sortiran )
    {
        sortiran = 1;

        for( i = 0; i < n-1; ++i )
        {
            detaljni_ispis( x, n, i, i+1, (x[i+1] < x[i]) );

            if( x[i+1] < x[i] )
            {
                int temp = x[i];
                x[i] = x[i+1];
                x[i+1] = temp;
            
                sortiran = 0;
            }
        }
    }
}


int main( void )
{
    int x[7] = {6, 1, 8, 3, 9, 4, 7}, n = 7;

    ispis( "Prije sortiranja", x, n );
    bubble_sort( x, n );
    ispis( "Poslije sortiranja", x, n );

    return 0;
}
