\section{Ordena\c c\~ao por compara\c c\~ao}

Nas pr\oo ximas se\c c\~oes assuma que o objetivo consiste em ordenar \sqn s
de itens e que essas \sqn s est\~ao representadas como vetores. Em princ\ii pio
todas as \sqn s cont\^em inteiros.

Valem as seguintes defini\c c\~oes\footnote{A nota\c c\~ao \ee\ emprestada de
\cite{apostol:calculus}}:

\begin{definition}
	\begin{gather}
		\incr S0m = \dfn \bndA{i}{\lelt 0ij<m}{S.i\le S.j}\\
		\decr S0m = \dfn \bndA{i}{\lelt 0ij<m}{S.i\ge S.j}\\
		\stincr S0m = \dfn \bndA{i}{\lelt 0ij<m}{S.i < S.j}\\
		\stdecr S0m = \dfn \bndA{i}{\lelt 0ij<m}{S.i > S.j}
	\end{gather}
\end{definition}


Os m\ee todos de ordena\c c\~ao de  \sqn s s\~ao geralmente classificados
em dois tipos:
\begin{itemize}
	\item ordena\c c\~ao por compara\c c\~ao: o passo fundamental da
		ordena\c c\~ao consiste na compara\c c\~ao entre itens do
		conjunto a ordenar.
	\item ordena\c c\~ao por distribui\c c\~ao: n\~ao\ existem compara\cao\
		entre itens e o passo fundamental da ordena\c c\~ao \ee\
		a separa\c c\~ao dos itens em grupos pela raiz do alfabeto
		usado para constru\ii-los.
\end{itemize}


\begin{theo}
	Uma \bintree\ de altura $h$ tem no m\aa ximo $2^h$ folhas.
	\proofbeg
	Exerc\ii cio.
	\proofend
\end{theo}

Um algoritmo para ordenar uma \sqn\ de $n$ elemtentos distintos via compara\cao\
de chaves constr\oo i uma \bintree\ de decis\ao\ onde cada n\oo\ representa uma
compara\cao\ entre dois elementos $a$ e $b$: o filho da esquerda desse n\oo\ 
armazena a \sqn\ de decis\oes\ do algoritmo quando $a<b$, sendo armazenada 
no filho da direita a \sqn\ de decis\oes\ adotadas quando $a>b$.

\begin{theo}
	Uma \tree\ decis\ao\ para ordenar $n$ elementos tem altura maior ou
	igual a $\lg n$.
	\proofbeg
	Exerc\ii cio.
	\proofend
\end{theo}

\begin{theo}
	Um algoritmo de ordena\cao\ por compara\cao\ demanda $\Omega{n\log n}$
	compara\coes\ de elementos.
\end{theo}

