Sunteți pe pagina 1din 4

\documentclass[a4paper]{article}

\usepackage[portuguese]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}
\usepackage{listings}
\usepackage{color}
\definecolor{lbcolor}{rgb}{0.9,0.9,0.9}
\lstset{
language=C,
tabsize=4,
basicstyle=\ttfamily,
backgroundcolor=\color{lbcolor},
showstringspaces=false
}
\title{Trabalho de Algoritmos e Programao II \\ Professora Me. Liana Duenha}
\author{Danilo Egidio Buzeti Florido \\
Vincius Nopilio Dias Silva}
\date{ FACOM - 2014/1}
\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage
\section{Introduo}
Em cincia da computao, algoritmos de ordenao so cdigos de programao que modificam a s
ia dos dados desejados de um programa, colocando-os numa outra ordem desejada. P
odem efetuar tal ordenao de forma completa ou parcial.
Neste trabalho, visamos a feitura de uma espcie de relatrio, discorrendo despreten
siosamente acerca dos algoritmos de ordenao utilizados no programa.
\section{Algoritmos de Ordenao}
\label{sec:examples}
\subsection{Bubble Sort}
\begin{lstlisting}
void bubble_sort(int n, int a[MAX]){
int i, j,aux;
for(i=n-1;i>0;i--){
for(j=0;j<i;j++){
cont++;
if(a[j]>a[j+1]){
aux=a[j];
a[j]=a[j+1];
a[j+1]=aux;
}
}
}
}
\end{lstlisting}
Considerado um dos algoritmos mais simples,porm um dos menos eficientes. Neste al
goritmo, cada elemento da posio i sofrer uma comparao com o elemento da posio i + 1, as
sim, um elemento da posio 2 ser comparado com o elemento da posio 3. Caso o elemento
da posio 2 for maior que o da posio 3, ocorrer a troca de lugar entre ambos sucessiva
mente. Devido a essa forma de execuo, o vetor ter que ser percorrido quantas vezes
for necessrio, tornando o algoritmo ineficiente para listas muito grandes.
Sua eficincia no pior caso O($n^{2}$), no mdio caso tambm O($n^{2}$) e no melhor ca
so O(n).
\todo[inline, color=green!40]{Sua eficincia no pior caso O($n^{2}$), no mdio caso
tambm O($n^{2}$) e no melhor caso O(n).}
\subsection{Selection Sort}
\begin{lstlisting}
void selection_sort(int a[MAX], int n) //Declaracao da funcao
{
int i, j, min, aux; //Declaracao das variaveis
for(i=0;i<(n-1);i++) //Inicializacao do vetor
{
min=i; //Passagem do menor valor do vetor para a primeira posicao (via de
regra)
for(j=(i+1);j<n;j++){
cont++;
if(a[j]<a[min])
min=j;
}
if(i != min){
aux=a[min];
a[min]=a[i];
a[i]=aux;
}
}
}
\end{lstlisting}
Tal algoritmo se fundamenta na passagem do menor valor do vetor para sua prime
ira posio (ou o maior variando de acordo com a ordem requerida) - em seguida, o se
gundo menor valor transferido para a segunda posio do referido vetor e, dessa man
eira, sucessivamente at os ltimos dois elementos.
Neste algoritmo de ordenao um nmero escolhido a partir do primeiro elemento do vet
or - tal nmero escolhido comparado com os nmeros a partir da sua direita e, quando
encontrado um nmero menor, o nmero escolhido ocupa a posio desse menor nmero. Este nm
ero encontrado ser o prximo nmero escolhido, caso no for encontrado nenhum nmero meno
r que este escolhido, o mesmo colocado na posio do primeiro nmero escolhido, e o prx
imo nmero sua direita vai ser o escolhido para fazer as comparaes. repetido esse pr
ocesso at que a lista esteja ordenada.
\todo[inline, color=green!40]{Sua eficincia no pior, mdio e melhor caso O($n^{2}$)
.}
\subsection{Insertion Sort}
\begin{lstlisting}
void insertion_sort(int a[MAX], int n)
{
int i, j, k;
for(i=1;i<n;i++)
{
k=a[i];
for(j=i-1;j>=0 && a[j]>k;j--){
a[j+1]=a[j];
cont++;
}
cont++;
a[j+1]=k;
}
}
\end{lstlisting}
considerado um algoritmo simples e eficiente ao ser aplicado em pequenas listas.
Neste algoritmo a lista percorrida da esquerda para a direita, e a medida em qu
e avana, os elementos mais esquerda se tornam ordenados com o decorrer de tempo.
O algoritmo funciona da mesma forma que as pessoas usam para ordenar cartas em u
m jogo de baralho como o pquer.
\todo[inline, color=green!40]{Sua eficincia no pior e mdio caso O($n^{2}$) e no m
elhor caso O(n).}
\subsection{Merge Sort}
\begin{lstlisting}
void merge_sort(int p, int r, int a[MAX])
{
int q;
if (p < r - 1) {
q = (p + r) / 2;
merge_sort(p, q, a);
merge_sort(q, r, a);
interc(p, q, r, a);
}
}
\end{lstlisting}
O Merge Sort um algoritmo que utiliza a ideia dividir para conquistar, que cons
iste em dividir o problema em subproblemas e resolve-los atravs da recursividade
e aps ocorre a juno das resolues dos subproblemas, portanto como ele utiliza a recurs
ividade, tem alto consumo de memria.
\todo[inline, color=green!40]{Sua eficincia no pior, mdio e melhor caso O(n log n)
.}\todo{O melhor caso possui uma variante natural O(n)!}
\section{Comparao entre os Algoritmos Utilizados no Trabalho Prtico}
\subsection{Bubble Sort}
Se mostra rpido e dinmico ao lidar com listas ordenadas de forma crescente, sendo
um dos nicos algoritmos que no realizam movimentaes. No entanto, possui o maior temp
o e nmero de comparaes dentre todos os algoritmos testados. Em todos os casos, at me
smo em listas j ordenadas, o bubble sort, apesar de sua simplicidade, se mostrou
como um algoritmo extremamente ineficiente.
\subsection{Selection sort}
Ao lidar com listas de ordem 1 e 3, foi o segundo pior algoritmo ordenativo, se
mostrando mais eficiente do que o Insertion sort no concernente ao tempo e quan
tidade de movimentaes na lista de ordem 2.
\subsection{Insertion Sort}
Ao lidar com listas de ordem 1, o Insertion sort mostrou-se mais eficiente que t
odos os outros algoritmos no tangente ao tempo e ao nmero de comparaes. Em listas d
e ordem 2, foi menos eficiente do que o selection sort e nas listas de ordem 3 p
ossui praticamente o mesmo desempenho entre o selection e o insertion.
\subsection{Quick Sort}
Em listas totalmente desordenadas, foi o algoritmo mais eficiente, efetuando a o
rdenao de forma mais rpida do que os outros algoritmos, principalmente nas listas d
e ordem 2 e 3.
\section{Grficos}
\begin{figure}[!htb]
\includegraphics[width=1\textwidth]{Bubble_Selection.png}
\caption{\label{fig:frog}Percebemos claramente o aumento da ineficiencia do Bubb
le e do Selection Sort conforme cresce a quantidade de elementos. Importante fri
zarmos que o Bubble e o Selection Sort obtiveram os mesmos resultados.}
\end{figure}
\begin{figure}[!htb]
\includegraphics[width=1\textwidth]{Insertionsort.png}
\caption{\label{fig:frog} Aqui, poucas comparaes so realizadas - no entanto, tal fa
to no torna o algoritmo mais eficiente quanto ao tempo de execuo.}
\end{figure}
\begin{figure}[!htb]
\includegraphics[width=1\textwidth]{Mergesort.png}
\caption{\label{fig:frog} um algoritmo recursivo notvel por sua eficincia - pouquss
imas comparaes e um excelente tempo de execuo.}
\end{figure}
\begin{figure}[!htb]
\includegraphics[width=1\textwidth]{Quicksort.png}
\caption{\label{fig:frog} o algoritmo recursivo mais eficiente entre todos os ci
tados por este trabalho. Possui muitas semelhanas com o Mergesort, no entanto gan
ha no quesito de economia de memria.}
\end{figure}
\begin{figure}[!htb]
\includegraphics[width=1\textwidth]{QuadroGeral.png}
\caption{\label{fig:frog} Breve resumo de todas as comparaes feitas pelo presente
estudo dos algoritmos de ordenao.}
\end{figure}
\end{document}

S-ar putea să vă placă și