#include <stdio.h>
int swap_count = 0;
int cmp(int x, int y)
{
return x > y;
}
void swap(int *x, int *y)
{
swap_count++;
int tmp = *x;
*x = *y;
*y = tmp;
}
int main(void)
{
int a[] = {3, 1, 4, 1, 5, 9, 2, 6, 5};
size_t n = sizeof a / sizeof a[0];
for (size_t i = 0; i < n - 1; ++i) {
int count = 0;
for (size_t j = 0; j < n - 1 - i; ++j) {
if (cmp(a[j], a[j + 1])) {
swap(&a[j], &a[j + 1]);
count++;
}
}
if (count == 0) {
break;
}
}
for (size_t i = 0; i < n; ++i) {
}
printf("swapの回数:%d回\n", swap_count
);
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgoKaW50IHN3YXBfY291bnQgPSAwOwoKaW50IGNtcChpbnQgeCwgaW50IHkpCnsKICAgIHJldHVybiB4ID4geTsKfQoKdm9pZCBzd2FwKGludCAqeCwgaW50ICp5KQp7CiAgICBzd2FwX2NvdW50Kys7CgogICAgaW50IHRtcCA9ICp4OwogICAgKnggPSAqeTsKICAgICp5ID0gdG1wOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgYVtdID0gezMsIDEsIDQsIDEsIDUsIDksIDIsIDYsIDV9OwogICAgc2l6ZV90IG4gPSBzaXplb2YgYSAvIHNpemVvZiBhWzBdOwoKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgewogICAgICAgIGludCBjb3VudCA9IDA7CgogICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbiAtIDEgLSBpOyArK2opIHsKICAgICAgICAgICAgaWYgKGNtcChhW2pdLCBhW2ogKyAxXSkpIHsKICAgICAgICAgICAgICAgIHN3YXAoJmFbal0sICZhW2ogKyAxXSk7CiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBwcmludGYoIiVkICIsIGFbaV0pOwogICAgfQoKICAgIHByaW50ZigiXG4iKTsKICAgIHByaW50Zigic3dhcOOBruWbnuaVsO+8miVk5ZueXG4iLCBzd2FwX2NvdW50KTsKCiAgICByZXR1cm4gMDsKfQo=