/*
 * arquivo: ordena_bubble.c
 * ------------------------
 * Este programa ordena crescentemente um vetor real com n elementos
 * (n < 100).
 *
 * Dados: n (inteiro) e n reais.
 */
#include <stdio.h>

#define NMAX 100

void leia_vetor(double v[], int n);
void imprima_vetor(double v[], int n);
void comp_troque(double v[], int i, int j);
void ordene_bolha(double v[], int n);

/************************************************************/

int main()
{
  double x[NMAX];
  int n;

  printf("Forneca o valor de n: ");
  scanf("%d", &n);

  leia_vetor(x, n);
  ordene_bolha(x, n);
  printf("O vetor ordenado:\n");
  imprima_vetor(x, n);

  return 0;
}

/*----------------------------------------------------------*/
/*
 * leia_vetor():
 * =============
 * Recebe um vetor de double v[] e um inteiro n.
 * Le n reais e os coloca em em v[], isto e', em
 * v[0],...,v[n-1].
 */
void leia_vetor(double v[], int n)
{
  int i;

  printf("Forneca os %d doubles: ", n);
  for (i = 0; i < n; i++)
    scanf("%lf", &v[i]);
}

/*-----------------------------------------------------------*/
/*
 * imprima_vetor():
 * ================
 * Recebe um vetor de n doubles v[] e o inteiro n
 * e imprime v[], isto e', imprime v[0],...,v[n-1].
 */
void imprima_vetor(double v[], int n)
{
  int i;

  printf("Os elementos do vetor sao ");
  for (i = 0; i < n; i++)
    printf("%g ", v[i]);
  printf("\n");
}

/*-----------------------------------------------------------*/
/*
 * ordene_bolha():
 * ==============
 * Recebe um vetor de n doubles v[0..n-1], um inteiro n,
 * e ordena esse vetor em ordem crescente.
 */

void ordene_bolha(double v[], int n)
{
  int i, j;
  for (i = 0; i < n-1; i++)
    for (j = n-1; j > i; j--)
      comp_troque(v, j - 1, j);
}

/*-----------------------------------------------------------*/
/*
 * comp_troque():
 * ==============
 * Recebe um vetor de n doubles v[0..n-1] e inteiros i < j.
 * Troca os elementos v[i] e v[j] caso v[i] > v[j].
 */

void comp_troque(double v[], int i, int j)
{
  double t;

  if (v[i] > v[j]) {
    t = v[i];
    v[i] = v[j];
    v[j] = t;
  }
}