Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Documentos relacionados
Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

Carlos Eduardo Batista. Centro de Informática - UFPB

BCC202 - Estrutura de Dados I

Carlos Eduardo Batista. Centro de Informática - UFPB

Métodos de Ordenação

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Projeto e Análise de Algoritmos

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Extra- Algoritmos de Ordenação

Livro Projeto de Algoritmos Nívio Ziviani Capítulo 4

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

BCC202 - Estrutura de Dados I

Ordenação. Ordenação. Introdução - Conceitos Básicos. Introdução - Conceitos Básicos

Ordenação. Última alteração: 26 de Março de Transparências elaboradas por Fabiano C. Botelho e Nivio Ziviani

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Quicksort. Algoritmos e Estruturas de Dados II

Ordenação. Última alteração: 31 de Agosto de Transparências elaboradas por Charles Ornelas Almeida, Israel Guerra e Nivio Ziviani

Métodos de Ordenação Parte 3

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Algoritmos de Ordenação: QuickSort

ALGORITMOS DE ORDENAÇÃO

Algoritmos e Estruturas de Dados II. Ordenação

Classificação por Particionamento

Estruturas de Dados Algoritmos de Ordenação

Ordenação. Última alteração: 10 de Outubro de Transparências elaboradas por Fabiano C. Botelho, Leonardo Rocha, Leonardo Mata e Nivio Ziviani

O Problema da Ordenação Métodos de Ordenação Parte 1

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Ordenação. Ordenação. Introdução - Conceitos Básicos. Introdução - Conceitos Básicos. Introdução - Conceitos Básicos

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Ordenação em Memória Primária Estrutura de Dados II

Algoritmos de ordenação Ordenação rápida ( Quicksort )

BCC202 - Estrutura de Dados I

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Algoritmos de Ordenação

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

AED2 - Aula 11 Problema da separação e quicksort

Análise de Desempenho de Algoritmos em Sistemas Multicore

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Classificação por Seleção - selection sort

5. Algoritmos de Ordenação

INF111 Programação II Aulas 11, 12, 13 Ordenação

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados. Décima sexta aula: Quicksort

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Algoritmos de ordenação

07 Ordenação em Memória Interna (parte 2) quicksort SCC201/501 - Introdução à Ciência de Computação II

Ordenação de Dados (IV) MergeSort

Algoritmos de ordenação: Inserção e Shellsort

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Radix Sorting. Várias aplicações têm chaves que são inteiros, definidos dentro de um intervalo

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

INF 1007 Programação II

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Projeto e Análise de Algoritmos

Algoritmos de ordenação: Bucketsort, Radixsort e Seleção

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim

Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

Métodos de ordenação. Bubble sort:

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Universidade da Madeira. 1. Recursão. 3. Busca. Profa. Dra. Laura Rodríguez Estruturas de dados e algoritmos 2

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Algoritmos de ordenação Quicksort

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

QuickSort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Algoritmos e Estrutura de Dados

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Quicksort [1] Quicksort [2]

Centro de Informá-ca Universidade Federal de Pernambuco. Vinicius Cardoso Garcia 2011 Vinicius Cardoso Garcia

Análise de Algoritmos Algoritmos de Ordenação

Quicksort Letícia Rodrigues Bueno

Módulo 16 - Ordenação

Programação de Computadores Ordenação de Arranjos

Projeto e Análise de Algoritmos

Exemplo. Lista Inicial (Desordenada) a. Iteração: Pivô: 25. Elemento da Esquerda: 48 Elemento da Direita: 12

Algoritmos de Ordenação: Tempo Linear

Transcrição:

Quicksort David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Quicksort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla variedade de situações. Provavelmente é o mais utilizado. A idéia básica é dividir o problema de ordenar um conjunto com n itens em dois problemas menores. Os problemas menores são ordenados independentemente. Os resultados são combinados para produzir a solução final.

Quicksort A parte mais delicada do método é o processo de partição. O vetor A [Esq..Dir] é rearranjado por meio da escolha arbitrária de um pivô x. O vetor A é particionado em duas partes: Parte esquerda: chaves x. Parte direita: chaves x.

Quicksort - Partição Algoritmo para o particionamento: 1. Escolha arbitrariamente um pivô x. 2. Percorra o vetor a partir da esquerda até que A[i] x. 3. Percorra o vetor a partir da direita até que A[j] x. 4. Troque A[i] com A[j]. 5. Continue este processo até os apontadores i e j se cruzarem.

Quicksort Após a Partição Ao final, do algoritmo de partição: o vetor A[Esq..Dir] está particionado de tal forma que: Os itens em A[Esq], A[Esq + 1],..., A[j] são menores ou iguais a x; Os itens em A[i], A[i + 1],..., A[Dir] são maiores ou iguais a x.

Quicksort - Exemplo O pivô x é escolhido como sendo: O elemento central: A[(i + j) / 2]. Exemplo: 3 6 4 5 1 7 2

Quicksort - Exemplo Primeira partição Segunda partição terceira partição 3 6 4 5 1 7 2 3 2 4 1 5 7 6 1 2 4 3 5 7 6 Caso especial: pivô já na posição correta. 1 2 3 4 5 7 6 Continua...

Quicksort - Exemplo quarta partição quinta partição 1 2 3 4 5 7 6 3 2 4 1 5 6 7 1 2 4 3 5 6 7 Final 1 2 3 4 5 6 7

Quicksort - Partição void Particao(int Esq, int Dir, int *i, int *j, Item *A) { Item pivo, aux; *i = Esq; *j = Dir; pivo = A[(*i + *j)/2]; /* obtem o pivo x */ do { while (pivo.chave > A[*i].Chave) (*i)++; while (pivo.chave < A[*j].Chave) (*j)--; if (*i <= *j) { aux = A[*i]; A[*i] = A[*j]; A[*j] = aux; (*i)++; (*j)--; } } while (*i <= *j); }

Quicksort O anel interno da função Particao é extremamente simples. Razão pela qual o algoritmo Quicksort é tão rápido.

Quicksort - Função /* Entra aqui o procedimento Particao */ void Ordena(int Esq, int Dir, Item *A) { int i,j; Particao(Esq, Dir, &i, &j, A); if (Esq < j) Ordena(Esq, j, A); if (i < Dir) Ordena(i, Dir, A); } void QuickSort(Item *A, int n) { Ordena(0, n-1, A); //Ordena(1, *n, A); }

Quicksort Características Qual o pior caso para o Quicksort? Por que? Qual sua ordem de complexidade? Qual o melhor caso? O algoritmo é estável?

Análise Quicksort Seja C(n) a função que conta o número de comparações. Pior caso: C(n) = O(n 2 ) O pior caso ocorre quando, sistematicamente, o pivô é escolhido como sendo um dos extremos de um arquivo já ordenado. Isto faz com que o procedimento Ordena seja chamado recursivamente n vezes, eliminando apenas um item em cada chamada. O pior caso pode ser evitado empregando pequenas modificações no algoritmo. Para isso basta escolher três itens quaisquer do vetor e usar a mediana dos três como pivô.

Quicksort Análise Melhor caso: C(n) = 2C(n/2) + n = n log n Esta situação ocorre quando cada partição divide o arquivo em duas partes iguais. Caso médio de acordo com Sedgewick e Flajolet (1996, p. 17): C(n) 1,386n log n 0,846n, Isso significa que em média o tempo de execução do Quicksort é O(n log n).

Vantagens: Quicksort É extremamente eficiente para ordenar arquivos de dados. Necessita de apenas uma pequena pilha como memória auxiliar. Requer cerca de n log n comparações em média para ordenar n itens. Desvantagens: Tem um pior caso O(n 2 ) comparações. Sua implementação é muito delicada e difícil: Um pequeno engano pode levar a efeitos inesperados para algumas entradas de dados. O método não é estável.

Quicksort Não Recursivo void QuickSortNaoRec (Vetor A, Indice n) { TipoPilha pilha; TipoItem item; int esq, dir, i, j; } FPVazia(&pilha); esq = 0; dir = n-1; item.dir = dir; item.esq = esq; Empilha(item,&pilha); do if (dir > esq) { Particao(A,esq,dir,&i, &j); item.dir = j; item.esq = esq; Empilha(item,&pilha); esq = i; } else { Desempilha(&pilha,&item); dir = item.dir; esq = item.esq; } while (!Vazia(pilha));

Pilha de Recursão x Pilha no Algoritmo Não Recursivo O que é colocado em cada uma das pilhas? Que intervalo do vetor é empilhado em cada caso?