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

Documentos relacionados
ALGORITMOS DE ORDENAÇÃO RECURSIVOS

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

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

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

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

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

Algoritmos e Estrutura de Dados

INF 1007 Programação II

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

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

Módulo 16 - Ordenação

Projeto e Análise de Algoritmos

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

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

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

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

void ins_ele (ARV_BIN_BUSCA *arv, int v) { if (!(*arv)) maketree(arv, v); else if (v<info(*arv)) /* if (v<(*arv)->info) */ ins_ele(&((*arv)->left),

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

Programação de Computadores II. Cap. 16 Ordenação

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

Algoritmos de pesquisa

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

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

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

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

Algoritmos de ordenação

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

Métodos de Ordenação Parte 3

Ordenação por Intercalação Métodos de Ordenação Parte 4

Ordenação - Motivação

Bubble Sort. Tempo total O(n 2 )

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

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2009/2010

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

Linguagem C: Ordenação

MÉTODOS DE ORDENAÇÃO DE DADOS EM MEMÓRIA PRIMÁRIA. Material da Prof. Ana Eliza

Capacitação em Linguagem C Parte 2

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Método de ordenação - objetivos:

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Ordenação de Vectores

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1

Algoritmos de Ordenação

Carlos Eduardo Batista. Centro de Informática - UFPB

Módulo 16 - Ordenação. Referências

ESTRUTURA DE DADOS (TCC )

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

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

BCC202 - Estrutura de Dados I

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

Árvores AVL. Estrutura de Dados II Jairo Francisco de Souza

Algoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema

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

Algoritmos e Estruturas de Dados

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

Árvore Binária de Busca. Prof. César Melo

Classificação de Dados

CES-11. Algoritmos e Estruturas de Dados. Árvores Operações sobre uma árvore Estruturas para armazenar árvores

UNIVERSIDADE DA BEIRA INTERIOR

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

LISTAS LINEARES. Estrutura de Dados

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

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

BCC202 - Estrutura de Dados I

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Árvores de pesquisa. Árvores de pesquisa equilibradas

Análise e Complexidade de Algoritmos

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Árvores, Árvores Binárias e Árvores Binárias de Pesquisa. Rui Jorge Tramontin Jr.

Algoritmos e Estruturas de Dados II. Trabalho Prático 3

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

BCC202 - Estrutura de Dados I

UNIVERSIDADE DA BEIRA INTERIOR

ALGORITMOS DE ORDENAÇÃO

UNIVERSIDADE DA BEIRA INTERIOR

Funções Finitas II: árvores AVL

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

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

ÁRVORE BINÁRIA DE BUSCA

Tipos Abstractos de Dados (TADs) e Java

Pesquisa Linear. Adriano J. Holanda 15/3/2016

Algoritmos de Ordenação em LISP

void subdivide (LISTA_ENC *pl, LISTA_ENC *pl1, LISTA_ENC *pl2) { int cont, k=1; for (cont=tam(*pl)/2;cont;cont--) {

Estruturas de dados e algoritmos fundamentais

Ordenação por Seleção Métodos de Ordenação Parte 3

Métodos de Ordenação

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

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

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

Estruturas de Dados Aula 11: TAD Pilha

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

Linguagem C: Algoritmos de Ordenação

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

Transcrição:

Quick Sort Mais rápido algoritmo de Ordenação (não paralelo) Baseia-se na ordenação de sub-listas divididas por um pivô O pivô é um elemento escolhido ao acaso, que é colocado na sua posição correta quando a lista estiver ordenada. Implementação complexa, não muito melhor para listas de pequeno tamanho (<100 elementos)

Exemplo Lista Inicial (Desordenada) 25 48 37 12 57 86 33 92 1a. Iteração: Pivô: 25 Elemento da Esquerda: 48 Elemento da Direita: 12 25 12 37 48 57 86 33 92 Elemento da Esquerda: 37 Elemento da Direita: 12 (Cruzamento de direita e esquerda) Troca de Pivô por elemento da direita

Exemplo (Continuação) 2a. Iteração: 12 25 37 48 57 86 33 92 Antigo pivô (Elemento 25) está na posição correta. Basta ordenar sub-listas: 12 ( 1 elemento = lista já ordenada) 37 48 57 86 33 92

Exemplo (Continuação 2) Ordenar sub-lista 37 48 57 86 33 92 Pivô: 37 Elemento da Esquerda:48 Elemento da Direita: 33 37 33 57 86 48 92 Elemento da Esquerda: 57 Elemento da Direita: 33 (Cruzamento->Troca de Pivô) 33 37 57 86 48 92 (Pivô na posição correta)] Sub-listas: 33 (1 elemento já ordenado) 57 86 48 92 (ordenar seguindo o mesmo algoritmo)

Quick Sort em Vetores void quick_sort(int vetor[],int left,int right){ if (right<= left) return; else { int pivot = vetor[left]; int inicio=left; int fim=right; do { while (left <=right && vetor[left] <= pivot) left++; while (vetor[right] > pivot) right--; if (left < right) { /* faz troca */ int temp = vetor[left]; vetor[left] = vetor[right]; vetor[right] = temp; left++; right--; while (left <= right); /* troca pivot */ vetor[inicio] = vetor[right]; vetor[right] = pivot; pivot=right; /* ordena sub-vetores restantes */ if(inicio<pivot) quick_sort(vetor,inicio,pivot-1); if(pivot<fim) quick_sort(vetor,pivot+1,fim);

Comparação de Desempenho

Um pouco de desordem... Função para desordenar um vetor.. Útil em certos tipos de aplicação. Exemplo: jogos de carta,.. void desordena(int v[],int tam) { randomize(); int aux; int x; for(int i=0;i<tam;i++) { x=rand()%tam; aux=v[i]; v[i]=v[x]; v[x]=aux;

Quick Sort em Listas Duplamente Encadeadas void quick_sort(node* left,node* right){ if(!validos(left,right)) return ; cadeia pivot; strcpy(pivot,left->nome); node* inicio=left; node* fim=right; node* aux; cruzou=0; do { while (!cruzou && strcmp(left->nome,pivot)<=0 ) { while (!cruzou); if(left==right) cruzou=1; left=left->prox; while (strcmp(right->nome,pivot)>0) { if(left==right) cruzou=1; right=right->prev; if (!cruzou) { // faz troca / swap3(left->prev,right->prev); aux=left; left=right; right=aux; int

Quick Sort em Listas Duplamente Encadeadas (Continuação) // troca pivot swap3(inicio->prev,right->prev); aux=inicio; inicio=right; right=aux; // ordena sub-vetores restantes if(inicio!=right) quick_sort(inicio,right->prev); if(right!=fim) quick_sort(right->prox,fim);

Quick Sort em Listas Duplamente Encadeadas (Versão Cópia) void quick_sort_copia_dados(node* left,node* right){ if(!validos(left,right)) return ; cadeia pivot; strcpy(pivot,left->nome); node* fim=right; cadeia aux; int cruzou=0; node* inicio=left; do { while (!cruzou &&strcmp(left->nome,pivot)<=0 ) {... if(left==right) left=left->prox; cruzou=1; while (strcmp(right->nome,pivot)>0) { if(left==right) cruzou=1; right=right->prev;

Quick Sort em Listas Duplamente Encadeadas (Versão Cópia) Continuação... if (!cruzou) { // faz troca / strcpy(aux,left->nome); strcpy(left->nome,right->nome); strcpy(right->nome,aux); while (!cruzou); // troca pivot strcpy(aux,inicio->nome); strcpy(inicio->nome,right->nome); strcpy(right->nome,aux); // ordena sub-vetores restantes if(inicio!=right) quick_sort_copia_dados(inicio,right->prev); if(right!=fim) quick_sort_copia_dados(right->prox,fim);

Verificação de Validade de Ponteiros Left e Right int validos(node* left,node* right) { if(left==null right==null left==right) return 0; while(left->prox!=null) { left=left->prox; if(left==right) return 1; return 0;