Metodos de Ordenação:

Bubble Sort e Quick Sort

antes de falarmos sobre os metodos devemos saber antes o que é metodos de ordenação.

O que é metodos de ordenação:

Resumindo são formas de organizar dados de forma mais eficiente, depedendo de criterios as quais quer seguir.

Nessa pagina veremos os metodos Bubble Sort e Quick Sort.


Bubble Sort:

Definição:

é um algoritmo de ordenação que pode ser aplicado em Vetores e Listas dinâmicas, o objetivo é ordenar valores de forma decrescente ou crescente.
O algoritmo compara dois os valores na posição x e na posição x+1, pegando um exemplo para facilitar o entendimento um caso de ordenação crescente,
como exemplo ele pegara dois valores, se o valor da posição (x+1) for menor que o valor na posição (x) ele trocara os valores de posição se não fará nenhuma ação.
Imagens de um exemplo a seguir:

imagen original

A ideia em geral da organização por bolha é flutuar o maior elemento para ultima posição

Curiosidade:

O nome de bolha ou bubble sort foi dada pela imagem usada para descreve-lo: os elementos maiores são mais leves, e sobem como bolhas até suas posições corretas.
W. Celes e J. L. Rangel

Codigo:

Caso queira saber como é o código aqui ta um exemplo em liguagem c++:

       void bubble_sort( int vetor [] ,  int n ) { 
            int k, j, aux;  
            for( k = 1 ; k < n; k++) {                               
               for( j =  0 ; j < n - 1 ; j++){
                    if(vetor[j] > vetor[j + 1]){
                        aux = vetor[j] ;
                        vetor [j]   =  vetor[j + 1];
                        vetor[j + 1] = aux;
                     } 
               }  
           }  
        } 

codigo retirado desse site

Logo abaixo segue um video feito pelos Alunos de Engenharia de Computação da UEPG sobre Bublle Sort:
ps:caso esteja indisponivel é só clicar no centro da tela, onde está escrito "assistir no youtube"

Quick Sort

Definição:

É um Algoritmo de ordenação por divisão e conquista. A logica desse metodo é que ele escolhe um pivô no vetor a ordenar e divide em dois subvetores, um subvetor com valores menores que o pivo alocando para a esquerda e os valores maiores no subvetor da direita. apos essa divisão o algoritmo passa a fazer a mesma coisa nesses grupos(escolhendo um novo pivo e dividindo-se e assim por diante nos seguinte subsgrupos). O processo só acaba quando cada grupo contenha um valor, e no final do processo os grupos estaram alinhados de forma ordenada. Exemplo na imagem a baixo:


imagem original

Código:

Em linguagem c++

    /* Algoritmo para  QuickSort */ 

int partition(int p,int r){ int aux,piv,i,j; piv = Vector[p]; i = p - 1; j = r + 1 ; while(1){ do j = j - 1; while(Vector[j] > piv); do i = i + 1; while(Vector[i] < piv); if(i < j){ aux = Vector[i]; Vector[i] = Vector[j]; Vector[j] = aux; } else return j; } } void QuickSort(int p,int r){ // primeiro elemento e ultimo elemento int q; if(p < r){ q = partition(p,r); QuickSort(p,q); QuickSort(q + 1,r); } }
Logo abaixo segue um video feito pelos Alunos de Engenharia de Computação da UEPG sobre QuickSort :
            ps:caso esteja indisponivel é só clicar no centro da tela, onde está escrito "assistir no youtube"

Codigo usado na Aula de Estrutura de Dados


Qual dos dois é o melhor a se usar?

fazendo um teste com um vetor de 10.000 elementos coletamos esses dados

Analizando os piores caso dos Metodos bubble (decrescente) e QuickSort(sendo o Pivo estando no começo do vetor ou no final) vimos que o QuickSort ele faz menos trocas do que o bubble, além de ter sido mais rápido, pois isso se deve que o Bublle Sort é um Algoritmo Θ(n^2) em todos os casos, sendo que no QuickSort só é o pior caso Θ(n^2) e seus casos Melhor / Medio são de θ(n log n) logo podemos concluir que o QuickSort é o melhor , mas tem um problema, o QuickSort precisa de mais Processamento do que o bubble para realizar o seu metodo, se não a maquina em que está sendo utilizado não conseguira realizar o metodo QuickSort.

teste com 100.000:

visto como anteriormente o teste em que foi realizado não tinha processador suficiente para realizar o metodo QuickSort.

Então use esses metodos conforme a sua necessidade.