#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <numeric>
int main() {
const std::size_t size = 10;
std::vector< int > v = {7, 8, 2, 9, 1, 3, 6, 5, 0, 4};
std::cout << "До сортировки: " << std::endl;
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
//--- sort start
std::size_t cntP = 0;
std::size_t cntS = 0;
std::size_t cntZ = 0;
bool swapped = true;
for (std::size_t i = 0; i < size && swapped; ++i)
{
swapped = false;
++cntP;
for (std::size_t j = (i % 2) ? 0 : 1; j < size - 1; j += 2)
{
++cntS;
if (v[j] > v[j + 1])
{
swapped = true;
++cntZ;
std::swap(v[j], v[j + 1]);
}
}
}
//--- sort end
std::cout << std::endl;
std::cout << "После сортировки: " << std::endl;
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
std::cout << std::endl;
std::cout << "Количество проходов: " << cntP << std::endl;
std::cout << "Количество сравнений: " << cntS << std::endl;
std::cout << "Количество замен: " << cntZ << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxudW1lcmljPgoKaW50IG1haW4oKSB7Cgljb25zdCBzdGQ6OnNpemVfdCBzaXplID0gMTA7CglzdGQ6OnZlY3RvcjwgaW50ID4gdiA9IHs3LCA4LCAyLCA5LCAxLCAzLCA2LCA1LCAwLCA0fTsKCglzdGQ6OmNvdXQgPDwgItCU0L4g0YHQvtGA0YLQuNGA0L7QstC60Lg6ICIgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3B5KHYuYmVnaW4oKSwgdi5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4oc3RkOjpjb3V0LCAiLCAiKSk7Ci8vLS0tIHNvcnQgc3RhcnQKCXN0ZDo6c2l6ZV90IGNudFAgPSAwOwoJc3RkOjpzaXplX3QgY250UyA9IDA7CglzdGQ6OnNpemVfdCBjbnRaID0gMDsKCWJvb2wgc3dhcHBlZCA9IHRydWU7Cglmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAmJiBzd2FwcGVkOyArK2kpCgl7CgkJc3dhcHBlZCA9IGZhbHNlOwoJCSsrY250UDsKCQlmb3IgKHN0ZDo6c2l6ZV90IGogPSAoaSAlIDIpID8gMCA6IDE7IGogPCBzaXplIC0gMTsgaiArPSAyKQoJCXsKCQkJKytjbnRTOwoJCQlpZiAodltqXSA+IHZbaiArIDFdKQoJCQl7CgkJCQlzd2FwcGVkID0gdHJ1ZTsKCQkJCSsrY250WjsKCQkJCXN0ZDo6c3dhcCh2W2pdLCB2W2ogKyAxXSk7CgkJCX0KCQl9Cgl9Ci8vLS0tIHNvcnQgZW5kCglzdGQ6OmNvdXQgIDw8IHN0ZDo6ZW5kbDsgCglzdGQ6OmNvdXQgIDw8ICLQn9C+0YHQu9C1INGB0L7RgNGC0LjRgNC+0LLQutC4OiAiIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y29weSh2LmJlZ2luKCksIHYuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIiwgIikpOwoJCglzdGQ6OmNvdXQgIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCAgPDwgItCa0L7Qu9C40YfQtdGB0YLQstC+INC/0YDQvtGF0L7QtNC+0LI6ICIgCTw8IGNudFAgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0ICA8PCAi0JrQvtC70LjRh9C10YHRgtCy0L4g0YHRgNCw0LLQvdC10L3QuNC5OiAiIAk8PCBjbnRTIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCAgPDwgItCa0L7Qu9C40YfQtdGB0YLQstC+INC30LDQvNC10L06ICIgCQk8PCBjbnRaIDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJuIDA7Cn0=
До сортировки:
7, 8, 2, 9, 1, 3, 6, 5, 0, 4,
После сортировки:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
Количество проходов: 9
Количество сравнений: 40
Количество замен: 29