Você está na página 1de 10

INSTITUTO SUPERIOR DE TRANSPORTES E COMUNICAÇÕES

Licenciatura em Engenharia Informática & de Telecomunicações

Turma I32

Disciplina: Algoritmo e Estrutura de Dados

Tema: Algoritmo de Ordenação “QuickSort”

Discentes:

 Crispino Menomussanga
 Dody Mambuque

 Edmilson Manjate

 Idácio Zibia
 Wagner Devete

Docente:Dr. Ticongolo, Inácio Gaspar


Maputo, Março de 2019

Índice
I. Introdução...................................................................................3

II. Metodologia................................................................................3

III. Algoritmo de Ordenação............................................................4

V. Implementação...........................................................................5

VI. Exemplo......................................................................................7

VII.Comparação com outros algoritmos de ordenação.....................7

VIII. Vantagens e desvantagens....................................................8

IX. Conclusão...................................................................................9

X. Bibliografia...............................................................................10

2
I. Introdução
Segundo as pesquisas feitas o método, Quicksort é um dos algoritmos de ordenação
mais utilizados a nível mundial. Não só para fins didácticos mas também para a resolução de
problemas práticos e reais, pelas suas características. Tem uma complexidade media algorítmica
de O(nLogn), mas nos piores casos é de O(n2).

II. Metodologia
Para elaboração deste trabalho tivemos auxilio da internet, pois não encontramos
conteúdos relacionados com a matéria na biblioteca da nossa escola. O objetivo do trabalho é
falar a cerca do método de ordenação quickSort e para entender o mesmo recorremos a vídeo
aulas no youtube e para uma melhor explicação lemos e comparamos os textos dispostos na
internet.

3
III. QuickSort
 O Quick Sort é um dos métodos mais rápidos de ordenação, apesar de às vezes partições

desequilibradas poderem conduzir a uma ordenação lenta. Esse método de ordenação utiliza a
técnica divide and conquer (dividir o problema inicial em dois subproblemas e resolver um
problema menor utilizando a recursividade)
 
            Este método baseia-se na divisão da tabela em duas sub-tabelas, dependendo de um
elemento chamado pivô, normalmente o 1º elemento da tabela. Uma das sub-tabelas contém os
elementos menores que o pivô enquanto a outra contém os maiores. O pivô é colocado entre
ambas, ficando na posição correcta. As duas sub-tabelas são ordenadas de forma idêntica, até que
se chegue à tabela com um só elemento.

Esse método de ordenação divide-se em vários passos:


        Escolher para pivô o primeiro elemento da tabela (p=x[1])
        Se os elementos de x forem rearranjados de forma a que o pivô (p) sejam
colocados na posição j e sejam respeitadas as seguintes condições:
1.      todos os elementos entre as posições 1 e j-1 são menores ou iguais que o
pivô (p)
2.      todos os elementos entre as posições j+1 e n são maiores que o pivô (p)
                        Então p permanecerá na posição j no final do ordenamento.
        Se este processo for repetido para as sub-tabelas x[1] a x[j-1] e x[j+1] a x[n] e
para todas as sub-tabelas criadas nas iterações seguintes obteremos no final uma
tabela ordenada.
 
Portanto a parte mais difícil deste método é o procedimento parte que divide a tabela em
2 sub-tabelas dependendo do pivô.

4
IV. Implementação
public class QuickSort{

public static void ordenar(int[] vetor{

ordenar(vetor, 0, vetor.length - 1);

private static void ordenar(int[] vetor, int inicio, int fim){

if (inicio < fim){

int posicaoPivo = separar(vetor, inicio, fim);

ordenar(vetor, inicio, posicaoPivo - 1);

ordenar(vetor, posicaoPivo + 1, fim);

private static int separar(int[] vetor, int inicio, int fim){

int pivo = vetor[inicio];

int i = inicio + 1, f = fim;

while (i <= f){

if (vetor[i] <= pivo)

i++;

else if (pivo < vetor[f])

f--;

else

5
{

int troca = vetor[i];

vetor[i] = vetor[f];

vetor[f] = troca;

i++;

f--;

vetor[inicio] = vetor[f];

vetor[f] = pivo;

return f;

6
V. Exemplo
Seja dado o vector[“25”,”57”,”48”,”37”,”12”,”92”,”86”,”33”,]

Aplicando o método quickSort o resultado sera:

VI. Comparação com outros algoritmos de ordenação


Comparando o algoritmo quickSort com os algoritmos ate então aprendidos
(bubbleSort, InsertSort e selectionSort) o quickSort destaca-se pois o mesmo é mais rápido e
eficiente. Esse método de ordenação utiliza a técnica divide and conquer (dividir o problema

7
inicial em dois subproblemas e resolver um problema menor utilizando a recursividade), facto
que justifica a sua eficiência.

VII. Vantagens e desvantagens


Vantagens:
 Melhor opção para ordenar vetores grandes;
 Muito rápido por que o laço interno é simples;
 Memória auxiliar para a pilha de recursão é pequena;
 Complexidade no caso médio é O(nln(n));
Desvantagens:
 Não é estável (não conhecemos forma eficiente para tornar o quicksort estável);
 Pior caso é quadrático;

8
VIII. Conclusão
O algoritmo QuickSort, acaba sendo rápido porque divide um array de tamanho
considerável em partes menores, e pela sua recursividade acaba sendo ainda mais rápida, pois
cria threads. Quicksort é uma versão optimizada de uma árvore binária ordenada. Em vez de
introduzir itens sequencialmente numa árvore explicita, o Quicksort organiza-os correntemente
na árvore onde está implícito, fazendo-o com chamadas recursivas à mesma. O algoritmo faz
exactamente as mesmas comparações, mas com uma ordem diferente.

9
IX. Bibliografia
http://w3.ualg.pt/~hshah/ped/Aula%2014/Quick_final.html

https://pt.wikipedia.org/wiki/Quicksort#O_algoritmo

https://pt.wikipedia.org/wiki/Algoritmo_de_ordena%C3%A7%C3%A3o

10

Você também pode gostar