Linha | Codigo |
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 |
012 | void 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 | |
023 | int 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 | } |