Условие
Определите, сколько обменов сделает алгоритм пузырьковой сортировки по возрастанию для данного массива.
Входные данные
В первой строке содержится количество элементов $n$ ($1 \leqslant n \leqslant 1000$) в массиве. Во второй строке — сам массив. Гарантируется, что все элементы массива различны и не превышают по модулю $10$$9$.
Выходные данные
Выведите одно число — количество обменов пузырьковой сортировки.
Тесты
№ | Ввод | Вывод |
---|---|---|
1 | 3 1 3 2 |
1 |
2 |
2 2 1 |
1 |
3 |
4 4 1 5 3 |
3 |
4 |
5 5 4 1 100000 7 |
4 |
5 |
6 6 5 4 3 2 1 |
15 |
Решение
Используем простой алгоритм пузырьковой сортировки: проходим по массиву циклом, если два элемента стоят не в том порядке, то меняем их местами. Так как задача состоит в том, чтобы вывести число обменов, при каждом обмене прибавляем к счётчику $1$. При каждом выполнении цикла по j ставится на место хотя бы 1 элемент, поэтому с каждым полным проходом его длина сокращается на $1$.
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <iostream> using namespace std; int n; int main() { cin >> n; int arr[n]; for(int i=0; i<n; i++) cin >> arr[i]; int counter=0; for(int u=0; u<n;u++) { for(int j=1; j<(n-u); j++) { if((arr[j]<arr[j-1])) { int prev; prev = arr[j-1]; arr[j-1] = arr[j]; arr[j] = prev; counter++; } } } cout << counter; return 0; } |
Ссылки
решение на e-olymp
код на ideone