Ordenar
Problema a resolver
Recorde das aulas que vimos alguns algoritmos para ordenar uma sequência de números: seleção por ordenação, ordenação por bolhas e ordenação por mesclagem.
- A seleção por ordenação itera sobre as partes não ordenadas de uma lista, selecionando o menor elemento de cada vez e movendo-o para sua localização correta.
- A ordenação por bolhas compara pares de valores adjacentes um de cada vez e os troca se estiverem na ordem incorreta. Isso continua até que a lista seja ordenada.
- A ordenação por mesclagem divide recursivamente a lista em duas repetidamente e, em seguida, mescla as listas menores de volta em uma maior na ordem correta.
Neste problema, você analisará três programas de ordenação (compilados!) para determinar quais algoritmos eles usam. Em um arquivo chamado answers.txt
em uma pasta chamada sort
, registre suas respostas, juntamente com uma explicação para cada programa, preenchendo os espaços em branco marcados como TODO
.
Código de distribuição
Para este problema, você precisará de algum "código de distribuição" - ou seja, código escrito pela equipe do CS50. São fornecidos três programas C já compilados, sort1
, sort2
e sort3
, bem como vários arquivos .txt
de entrada e outro arquivo, answers.txt
, para você gravar suas respostas. Cada um de sort1
, sort2
e sort3
implementa um algoritmo de ordenação diferente: seleção por ordenação, ordenação por bolhas ou ordenação por mesclagem (embora não necessariamente nessa ordem!). Sua tarefa é determinar qual algoritmo de ordenação é usado por cada arquivo. Comece baixando esses arquivos.
Baixar arquivos de distribuição
Abra o VS Code.
Comece clicando dentro da janela do terminal e execute cd
sozinho. Você deve descobrir que seu "prompt" se assemelha ao abaixo.
$
Clique dentro da janela do terminal e execute
wget https://cdn.cs50.net/2023/fall/psets/3/sort.zip
seguido por Enter para baixar um ZIP chamado sort.zip
no seu codespace. Tome cuidado para não esquecer o espaço entre wget
e a URL a seguir, ou qualquer outro caractere!
Agora execute
unzip sort.zip
para criar uma pasta chamada sort
. Você não precisa mais do arquivo ZIP, então você pode executar
rm sort.zip
e responda com "y" seguido de Enter no prompt para remover o arquivo ZIP que você baixou.
Dicas
Explore os arquivos .txt
- Vários arquivos
.txt
são fornecidos para você. Esses arquivos contêmn
linhas de valores, invertidos, embaralhados ou classificados.- Por exemplo,
reversed10000.txt
contém 10000 linhas de números que são invertidas de10000
, enquantorandom50000.txt
contém 50000 linhas de números que estão em ordem aleatória.
- Por exemplo,
- Os diferentes tipos de arquivos
.txt
podem ajudá-lo a determinar qual ordenação é qual. Considere como cada algoritmo é executado com uma lista já ordenada. Que tal uma lista invertida? Ou lista embaralhada? Pode ser útil trabalhar com uma lista menor de cada tipo e percorrer cada processo de ordenação.
Cronometre cada ordenação com entradas diferentes
- Para executar as ordenações nos arquivos de texto, execute o seguinte no terminal:
./[nome_do_programa] [arquivo_de_texto.txt]
. Certifique-se de ter usadocd
para mover para o diretóriosort
!- Por exemplo, para ordenar
reversed10000.txt
comsort1
, execute./sort1 reversed10000.txt
.
- Por exemplo, para ordenar
- Pode ser útil cronometrar suas ordenações. Para fazer isso, execute
time ./[arquivo_de_ordenacao] [arquivo_de_texto.txt]
.- Por exemplo, você pode executar
time ./sort1 reversed10000.txt
para executarsort1
em 10.000 números invertidos. No final da saída do seu terminal, você pode olhar para o temporeal
para ver quanto tempo realmente decorreu durante a execução do programa.
- Por exemplo, você pode executar
Passo a passo
Não sabe como resolver?
Como testar
Correção
check50 cs50/problems/2024/x/sort
Como enviar
submit50 cs50/problems/2024/x/sort