Este algoritmo ordena um vetor de uma quantidade de números pré-determinada. O diferencial é que ele não utiliza ponteiros para a passagem de parâmetros, pois ponteiros é um pouco complicado para iniciantes.
A utilização é simples, digite o número máximo de algarismos e depois digite os algarismos fora de ordem, a função vai ordena-los e imprimi-los em ordem.
/* Algoritmo de ordenação Bubble Sort */
#include <stdio.h>
/* Definição da função bubble_sort */
void bubble_sort (int vet[], int max) {
int flag, i, aux;
do {
flag = 0;
for (i = 0; i < (max - 1); i++) {
/* Verfica se o vetor está em ordem, no caso ele coloca em ordem crescente, para decrescente trocar '>' por '<' */
if (vet[i] > vet[i+1]) {
/* Caso não esteja, ordena */
aux = vet[i];
vet[i] = vet[i+1];
vet[i+1] = aux;
flag =1;
}
}
/* Repete enquanto algum valor estiver fora de ordem */
} while (flag == 1);
/* Imprime o vetor ordenado em ordem crescente */
for (i = 0; i < max; i++) {
printf ("%d ",vet[i]);
}
printf ("\n");
}
main () {
int max, i;
/* Lê o total de números do vetor */
scanf ("%d", &max);
/* Define o vetor com o número max de algarismos */
int vetor[max];
for (i = 0; i < max; i++) {
/* Lê cada indice do vetor */
scanf ("%d",&vetor[i]);
}
/* Dentro dessa função o vetor será ordenado */
bubble_sort (vetor, max);
}
[2] Comentário enviado por mfs em 12/04/2010 - 19:34h
Funcionou sim. Não usei ponteiros pois queria que entendessem o funcionamento dos algoritmos, e iniciantes geralmente sentem dificuldades em ponteiros. Aqui em casa funcionou, uso o gcc. Eu não declarei um vetor sem valor especifico, primeiro eu li a variavel max e depois declarei o vetor[max]. Se o valor de max for 10, por exemplo, seria o mesmo que vetor[10].
Eu poderia ter usado um contador, seria mais claro ainda. Nós fazíamos assim no curso, conforme se inseria um valor incrementava a variável de mais um.
[3] Comentário enviado por eduardo em 12/04/2010 - 20:47h
É cara, acho que é o compilador mesmo. Testei em outro e realmente aceita este tipo de processo. É que compilo normalmente no programa gráfico direto, e não aceita esse tipo de formato.
[4] Comentário enviado por mfs em 12/04/2010 - 23:14h
Eu inclusive testei de novo, pois eu programava em Windows no Dev-C e ele não é muito bom. Ficaria melhor ainda se declarasse um contador. E no for de leitura a cada algarismo digitado incrementar de um assim é possível digitar quantos quiser, só tem que definir um parâmetro de término do loop, por exemplo um numero negativo ou zero.