# Mundo da ordenação

Este mundo fornece ferramentas para experimentar com algoritmos de ordenação. Ele pode ser usado de duas formas diferentes: a primeira é naturalmente para escrever os algoritmos de ordenação necessários. Mas também é possível simplesmente usar o modo de demonstração de cada exercício para observar o comportamento de algoritmos de ordenação. Isto ajuda a entender as diferenças entre cada um deles.

## Métodos disponíveis para algoritmos de ordenação

Método | Ação | Custo
[!java|c]int [/!]getQuantidadeDeValores() [!scala]:Int[/!] | Retorna a quantidade de valores na array | nenhum
[!java]boolean [/!][!c]int [/!]éMenor([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int [/!]j[!scala]:Int[/!]) [!scala]:Boolean[/!] | Retorna verdadeiro se o conteúdo da célula i é estritamente menor que o da célula j | duas leituras
[!java]boolean [/!][!c]int [/!]éMenorQue([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int [/!]value[!scala]:Int[/!])[!scala] :Boolean[/!] | Retorna verdadeiro se o conteúdo da célula i é estritamente menor que `valor` | uma leitura
[!java|c]void [/!]alternar([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int [/!]j[!scala]:Int[/!]) | Alterna ("swap") o conteúdo da célula i com o da célula j | duas escritas, duas leituras
[!java|c]void [/!]copia([!java|c]int [/!]de[!scala]:Int[/!], [!java|c]int [/!]para[!scala]:Int[/!]) | Copia o conteúdo da célula 'de' para a célula 'para' | uma leitura, uuma escrita
[!java|c]int [/!]getValor([!java|c]int [/!]idx[!scala]:Int[/!]) | Retorna o valor da célula idx | uma leitura
[!java|c]void [/!]setValor([!java|c]int [/!]idx[!scala]:Int[/!], [!java|c]int [/!]valor[!scala]:Int[/!]) | Coloca na célula 'idx' o `valor` | uma escrita
[!java]boolean [/!][!c]int [/!]selecionado() [!scala]:Boolean[/!] | Retorna verdadeiro se o mundo atual está selecionado na interface gráfica. | nenhum

## Visão do histórico

É suficiente ordenar a array para resolver os exercícios. Sua solução deve seguir estritamente o comportamento esperado em cada exercício. Isto é reforçado verificando que seu algoritmo precisa da mesma quantidade de operações de leitura e escrita para ordenar a array. Quando estas quantidades não coincidem, compreender a diferença entre seu código e a solução esperada pode se mostrar bem difícil.

Para ajudar neste processo, é possível explorar graficamente o histórico do algoritmo de ordenação. Alternar para a visão Objetivo e usar o menu de contexto (clique com botão direito) para alternar da visão do estado atual para a visão do histórico.

A visão do histórico é um pouco bagunçada à primeira vista, mas na verdade é bem simples: o tempo anda da esquerda para a direita neste gráfico, e cada linha é uma célula de sua array. As linhas curvas que navegam entre linhas representam um certo valor de um dado. Quando duas linhas se cruzam, significa que dois valores foram alternados neste momento; uma bifurcação numa linha representa uma cópia de valor; quando um valor é magenta e seguido de uma interrogação (?), foi lido usando getValor(); Se o valor é vermelho e seguido de uma exclamação (!), foi escrito com setValor().

Esta visão, inspirada por Aldo Cortesi, se mostra muito útil para entender o comportamento interno de algoritmos de ordenação.