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;
}
}
}
}
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.