LinhaCodigo
001// Prof. Leo^nidas - http://www.matematica.br http://line.ime.usp.br
002// MAC0122 - 2017/08/21
003
004// Ordena vetor de inteiros via metodo da Bolha. Complexidade: O(n^2)
005
006#include <stdio.h>
007
008#define MAX 100
009#define INTERVALO 100  // para gerar valores pseudo-aleatorios (modulo 100 => numeros entre 0 e 99)
010
011// Ordena vet[0..n-1] usando metodo da Bolha
012void ordenaBolha (int vet[], int n) {
013  int ii, jj, aux;
014  for (ii=0; ii<n-1; ii++) // invariante: vet[0]<=vet[1]<=...<=vet[ii-1] <= vet[j], j em { ii, ii+1, ..., n-1 }
015    for (jj=n-1; jj>ii; jj--)  // invariante: vet[jj] <= vet[j], j em { jj+1, jj+2, ..., n-1 }
016      if (vet[jj-1]>vet[jj]) { // troque-os
017        aux = vet[jj-1];
018        vet[jj-1] = vet[jj];
019        vet[jj] = aux;
020        }
021  }
022
023int main (void) {
024  int dados[MAX];   
025  int ii, n;
026
027  printf("\n\n\nDados iniciais:\n");
028  // scanf ("%d", &n); for (ii = 0; ii < n; ii++) scanf("%d", &dados[ii]);   
029  n = 10;
030  for (ii=0; ii<n; ii++) {
031    dados[ii] = rand() % INTERVALO;
032    printf("%3d", dados[ii]);
033    }
034
035  ordenaBolha(dados, n);
036
037  printf("\nOrdenado:\n");
038  for (ii=0; ii<n; ii++)
039    printf("%3d", dados[ii]);
040  printf("\n");
041
042  return 0;
043  }