Unipe - P4 - Estrutura de dados II
Professora: Lisieux Andrade
Repositório: GitHub
Fonte: SPOJ
Uma das operações mais frequentes em computação é ordenar uma sequência de objetos. Por- tanto, não é surpreendente que essa operação seja também uma das mais estudadas.
Um algoritmo bem simples para ordenação é chamado Bubblesort. Ele consiste de vários turnos. A cada turno o algoritmo simplesmente itera sobre a sequência trocando de posição dois elementos consecutivos se eles estiverem fora de ordem. O algoritmo termina quando nenhum elemento trocou de posição em um turno.
O nome Bubblesort (ordenação das bolhas) deriva do fato de que elementos menores ("mais leves") movem-se na direção de suas posições finais na sequência ordenada (movem-se na direção do início da sequência) durante os turnos, como bolhas na água. A figura abaixo mostra uma implementação do algoritmo em pseudo-código:
Para i variando de 1 a N faça
Para j variando de N - 1 a i faça
Se seq[j - 1] > seq[j] então
Intercambie os elementos seq[j - 1] e seq[j]
Fim-Se
Fim-Para
Se nenhum elemento trocou de lugar então
Final do algoritmo
Fim-Se
Fim-Para
Por exemplo, ao ordenar a sequência
Embora simples de entender, provar correto e implementar, o algoritmo bubblesort é muito ineficiente: o número de comparações entre elementos durante sua execução é, em média, diretamente proporcional a
Você foi requisitado para fazer uma "engenharia reversa" no bubblesort, ou seja, dados o comprimento da sequência, o número de turnos necessários para a ordenação e o número de intercâmbios ocorridos em cada turno, seu programa deve descobrir uma possível sequência que, quando ordenada, produza exatamente o mesmo número de intercâmbios nos turnos.
A entrada contém vários casos de teste. A primeira linha de um caso de teste contém dois inteiros N e M que indicam respectivamente o número de elementos
O final da entrada é indicado por
A entrada deve ser lida da entrada padrão.
Para cada caso de teste da entrada seu programa deve produzir uma linha na saída, contendo uma permutação dos números
Em outras palavras, caso exista mais de uma solução, imprima aquela onde o primeiro elemento da permutação é o maior possível. Caso exista mais de uma solução satisfazendo essa restrição, imprima, dentre estas, aquela onde o segundo elemento é o maior possível. Caso exista mais de uma solução satisfazendo as duas restrições anteriores, imprima, dentre estas, a solução onde o terceiro elemento é o maior possível, e assim sucessivamente.
Para toda entrada haverá pelo menos uma permutação solução.
A saída deve ser escrita na saída padrão.
Entrada:
3 1
1
5 4
4 3 2 1
6 5
2 2 2 2 1
0 0
Saída:
2 1 3
5 4 3 2 1
6 5 1 2 3 4