Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação Funcional - Exercícios Resolvidos - aula 13, Exercícios de Informática

Coleção completa de exercícios resolvidos em haskell

Tipologia: Exercícios

2013

Compartilhado em 13/09/2013

bruno-franco-oliveira-9
bruno-franco-oliveira-9 🇧🇷

4

(10)

63 documentos

1 / 18

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Ordenac¸ ˜
ao de Valores em Haskell
Ordenac¸ ˜
ao
Linguagem Haskell
Maria Adriana Vidigal de Lima
Faculdade de Computac¸ ˜
ao - UFU
Dezembro - 2009
Maria Adriana Vidigal de Lima Ordenac¸ ˜
ao
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12

Pré-visualização parcial do texto

Baixe Programação Funcional - Exercícios Resolvidos - aula 13 e outras Exercícios em PDF para Informática, somente na Docsity!

Ordenac¸ ˜ao de Valores em Haskell

Ordenac¸ ˜ao

Linguagem Haskell

Maria Adriana Vidigal de Lima

Faculdade de Computac¸ ˜ao - UFU

Dezembro - 2009

Ordenac¸ ˜ao de Valores em Haskell (^1) Ordenac¸ ˜ao de Valores em Haskell T ´ecnicas de Ordenac¸ ˜ao Ordenac¸ ˜ao por Selec¸ ˜ao Ordenac¸ ˜ao por Inserc¸ ˜ao Ordenac¸ ˜ao R ´apida Ordenac¸ ˜ao por Bolha

Ordenac¸ ˜ao por Selec¸ ˜ao

Estrat ´egia de ordenac¸ ˜ao

Encontrar o menor elemento da lista.

Inserir o elemento encontrado numa nova lista, e remov ˆe-lo da

lista de origem.

Repetir as ac¸ ˜oes acima at ´e que a lista original seja vazia.

Ordenac¸ ˜ao por Selec¸ ˜ao

Exemplo:

Lista Inicial:

[3,4,5,1,2]

Menor Elemento: 1

[1] -- [3,4,5,2]

Menor Elemento: 2

[1,2] -- [3,4,5]

Menor Elemento: 3

[1,2,3] -- [4,5]

Menor Elemento: 4

[1,2,3,4] -- [5]

Menor Elemento: 5

[1,2,3,4,5] -- []

Ordenac¸ ˜ao por Inserc¸ ˜ao

Estrat ´egia de ordenac¸ ˜ao:

Percorrer a lista da esquerda para a direita, e para cada novo

elemento encontrado, inseri-lo de forma ordenada numa nova

lista.

O processo termina quando a lista de origem for vazia.

Este tipo de ordenac¸ ˜ao ´e r ´apido para pequenas listas.

Ordenac¸ ˜ao por Inserc¸ ˜ao

Exemplo:

Lista Inicial: [3,4,2,5,1]

Inser¸c~ao Ordenada

Lista Original --- Lista Ordenada

[3,4,2,5,1] --- []

[4,2,5,1] --- [3]

[2,5,1] --- [3,4]

[5,1] --- [2,3,4]

[1] --- [2,3,4,5]

[] --- [1,2,3,4,5]

Ordenac¸ ˜ao por Inserc¸ ˜ao em Haskell

Implementac¸ ˜ao usando a func¸ ˜ao gen ´erica ( foldr ):

insercao2 :: Ord a => [a] -> [a]

insercao2 = foldr insereOrd []

insereOrd ::(Ord a) => a -> [a] -> [a]

insereOrd x [] = [x]

insereOrd x (y:ys)

| x <= y = (x:y:ys)

| otherwise = y: (insereOrd x ys)

Ordenac¸ ˜ao por Inserc¸ ˜ao em Haskell

Execuc¸ ˜ao de um exemplo usando a func¸ ˜ao insercao2 :

foldr f z [] = z

foldr f z (x:xs) = f x (foldr f z xs)

>insercao2 [3,1,5,2]

foldr insereOrd [] [3,1,5,2]

insereOrd 3 (foldr insereOrd [] [1,5,2])

insereOrd 1 (foldr insereOrd [] [5,2])

insereOrd 5 (foldr insereOrd [] [2])

insereOrd 2 (foldr insereOrd [] [])

insereOrd 2 []

insereOrd 5 [2]

insereOrd 1 [2,5]

insereOrd 3 [1,2,5]

[1,2,3,5]

Ordenac¸ ˜ao R ´apida

Exemplo:

Lista Inicial: [3,7,2,6,1,4]

Inser¸c~ao Ordenada

Lista Menores -- Piv^o -- Lista Maiores

[2,1] -- 3 -- [7,6,4]

Particiona Particiona

Sub-lista 3 Sub-lista

[2,1] [7,6,4]

LMen P LMai

[1] 2 []

Ordenac¸ ˜ao R ´apida em Haskell

quicksort::(Ord a) => [a] -> [a]

quicksort [] = []

quicksort (s:xs) = quicksort [x|x <- xs,x < s]

++ [s] ++

quicksort [x|x <- xs,x >= s]

Ordenac¸ ˜ao por Bolha

Exemplo:

Lista Inicial: [3,7,2,6,1,4]

1 a^ Troca: [3,2,6,1,4,7]

2 a^ Troca: [2,3,1,4,6,7]

3 a^ Troca: [2,1,3,4,6,7]

4 a^ Troca: [1,2,3,4,6,7]

5 a^ Troca: [1,2,3,4,6,7]

Ordenac¸ ˜ao por Bolha em Haskell

bolha [] = []

bolha lista = bolhaOrd lista (length lista)

bolhaOrd lista 0 = lista

bolhaOrd lista n = bolhaOrd (troca lista) (n-1)

troca [x] = [x]

troca (x:y:zs)

| x > y = y : troca (x:zs)

| otherwise = x : troca (y:zs)