Pesquisar no blog:

domingo, 16 de dezembro de 2012

Bubble Sort - Linguagem C

O método de ordenação bubble sort é um método muito simples de ordenação. Porém, seu desempenho é muito ruim. Quanto maior o vetor a ser ordenado por ele, pior será seu desempenho.
Fiz um trabalho em MATLAB recentemente na faculdade onde eu apresentava essa diferença gritante entre o método bubble sort e o método shell sort.
Vou publicar hoje o método bubble sort em C e em breve darei sequencia com outros métodos de ordenação.
O método bubble sort (Ordenação bolha) recebeu esse nome por que durante sua ordenação os maiores números são ordenados primeiro, como as bolhas de um recipiente onde as maiores chegam primeiro a superfície. Ou seja, ele compara todos os números do início ao fim do vetor e sempre que o primeiro for maior ele inverte as posições. Terminando de verificar o vetor a primeira vez ele terá encontrado o maior número e na próxima passada ele não verificará o ultimo número ordenado.

void bubbleSort(int v[], int tam)
{
    int i, j, aux, troca;
    for(i = 0; i < tam; i++)
    {
        troca = 0;
        for(j = 0; j < (tam-1)-i; j++)
        {
            if(v[j] > v[j+1])
            {//realiza troca dos elementos
                aux = v[j];
                v[j] = v[j+1];
                v[j+1] = aux;
                troca = 1;
            }
        }
        //se não foram realizadas trocas, vetor já está ordenado
        if(troca == 0) 
            break; //sai do laço
    }
}

int main(int argc, char *argv[])
{
    int i, vet[10] = {10,9,3,6,7,5,1,8,4,2};
    printf("Vetor atual: ");
    for(i = 0; i < 10; i++) //mostrar vetor desordenado
        printf("%d ", vet[i]);
    printf("\n");
    system("pause"); //pausar
    bubbleSort(vet, 10); //chamada a função bubble enviando vetor e tamanho dele
    printf("\n\nVetor ordenado: ");
    for(i = 0; i < 10; i++) //mostrar vetor ordenado
        printf("%d ", vet[i]);
    printf("\n");
    system("pause"); //pausar
    return 0;
}


Nesse código criei a função que ordena com o método Bubble Sort. Podemos assim mandar o vetor como argumento para ser ordenado por nossa função. Para facilitar a visualização do que ocorreu na função eu criei um vetor com valores de 1 a 10 embaralhados e mandei imprimir esses números antes de serem ordenados e depois de serem ordenados.
O algoritmo do bubble sort pode ser desenvolvido usando outras lógicas que no final terão o mesmo resultado. Porém, além deste método existem outros mais eficientes.

Nenhum comentário:

Postar um comentário