10327. Сортировка перестановками
В задаче требуется отсортировать
массив чисел. При этом разрешается совершать лишь одну операцию: менять местами
два соседних числа. Необходимо найти минимальное число таких перестановок, в
результате которых массив чисел будет отсортирован по возрастанию.
Вход.
Состоит из нескольких тестов. Первая строка каждого теста содержит количество
целых чисел n (n £ 1000), подлежащих сортировке. В
следующей строке находятся сами n
чисел.
Выход. Для каждого теста вывести согласно
приведенному ниже формату минимальное число операций перестановки двух соседних
элементов, в результате которых будет отсортирован массив по возрастанию.
3
1 2 3
3
2 3 1
Minimum exchange operations : 0
Minimum exchange operations : 2
сортировка
Пусть a1, a2, …, an
– некоторая последовательность чисел. Если i < j и ai
> aj, то пара (ai, aj)
называется инверсией. Минимальное количество перестановок соседних элементов,
которое следует совершить для сортировки последовательности, равно числу
инверсий в ней.
2 3 1 à 2 1 3 à 1 2 3
Читаем входную последовательность
из n чисел в массив m.
while(scanf("%d",&n)
== 1)
{
for(i = 0; i
< n; i++)
scanf("%d",&m[i]);
В переменную res заносим количество инверсий во входной последовательности и
выводим результат.
res = 0;
for(i = 0; i
< n - 1; i++)
for(j = i +
1; j < n; j++)
if (m[i]
> m[j]) res++;
printf("Minimum
exchange operations : %d\n",res);
}