Bubblesort

Alex Silva

Um algoritmo de ordenação

Um dos algoritmos mais simples que existem, porem ele é o mais custoso dependendo do tamanho do vetor a ser ordenado.

como ele funciona

1-Percorra o vetor inteiro comparando elementos adjacentes (dois a dois).

2-Troque as posições dos elementos se eles estiverem fora de ordem.

3-Repita os dois passos acima com os primeiros n-1 itens,

depois com os primeiros n-2 itens, até que reste apenas um item.

O método ilustrado

As chaves em vermelho foram empurradas para o fim do vetor a cada passada : bolhas

método bolha

void Bolha (Vetor A; Indice n)
{
Indice i, j;
Item temp;
for (i:= n-1; i >= 1; i--)
{
for (j= 0; j < i ;j++)
{
if (A[j].chave < A[j+1].chave)
{
temp = A[j].chave;
A[j].chave = A[j+1].chave;
A[j+1].chave = temp;
}
}
}
}

como você pode melhorar esse método?

Agora tente melhorar !!

Dica:Termina execução quando nenhuma troca é realizada após uma passada pelo vetor.

 

Mais um exemplo do algoritmo Bubble Sort

static void Main(string[] args)
            {
                int[] numbers = { 45, 81, 29, 66, 03, 52, 51, 55, 74 };

                Console.WriteLine("Example Bubble Sort");

                bubbleSort(numbers, numbers.Length); // length é o comprimento, neste caso comprimento do vetor numbers.

                for (int i = 0; i < numbers.Length; i++)
                    Console.WriteLine(numbers[i]);

                Console.ReadLine();
            }

            static void bubbleSort(int[] arr, int length)
            {
                int repos = 0;
                /*Irá percorrer o vetor, comparando cada elemento do vetor com o elemento 
                 * imediatamente seguinte (arr[j] = arr[j + 1];) 
                 * O numero maximo de execuções do trecho do algoritmo 
                 * p/ que o vetor fique ordenado é de N - 1, onde N é o numero de vezes.*/

               

                // i determina o número de etapas para a ordenação 
               
                for (int i = 0; i < length - 1; i++)
                {
                    // j determina o numero de comparações em cada etapa e os indices a serem 
                    //pesquisados para a comparação. 
                   
                    for (int j = 0; j < length - (i + 1); j++)
                    {
                        if (arr[j] > arr[j + 1])
                        {
                            repos = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = repos;
                        }
                    }
                }
            }

Voltar