1162 - Organizador de Vagões
O método de ordenação descrito é idêntico ao InsertionSort!
Descrição
Solução
O processo de ordenação descrito envolve fazer trocas entre dois elementos consecutivos até que todos os elementos estejam ordenados, o que é precisamos o processo de ordenação do InsertionSort. Logo, tudo o que precisamos fazer é contar o número que vezes que uma troca de posição entre elementos acontece no InsertionSort.
#include <stdio.h>
int comp(int a, int b)
{
return a - b;
}
void swap(int *a, int *b)
{
int aux = *a;
*a = *b;
*b = aux;
}
int insertionSort(int *V, int n)
{
int trocas = 0;
for (int i = 1; i < n; ++i)
{
int j = i, k = j - 1;
while (k > -1 && comp(V[j], V[k]) < 0)
{
swap(&V[j], &V[k]);
++trocas;
--j, --k;
}
}
return trocas;
}
int main()
{
int N, L, vagoes[50];
scanf("%d", &N);
for (int k = 0; k < N; ++k)
{
scanf("%d", &L);
for (int i = 0; i < L; ++i)
{
scanf("%d", &vagoes[i]);
}
printf("Optimal train swapping takes %d swaps.\n", insertionSort(vagoes, L));
}
return 0;
}
Last updated
Was this helpful?