#include <stdio.h>
int cmp(int x, int y) // compare x and y
{
return x > y; // 1 if x > y, 0 otherwise
}
void swap(int *x, int *y)
{
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];
size_t count = 0;
size_t passes = 0;
for (size_t i = 0; i < n - 1; ++i) {
int swapped = 0;
++passes;
for (size_t j = 0; j < n - 1 - i; ++j) {
if (cmp(a[j], a[j + 1])) {
swap(&a[j], &a[j + 1]);
++count;
swapped = 1;
}
}
if (!swapped) break;
}
for (size_t i = 0; i < n; ++i) {
}
printf("swap count = %zu\n", count
); printf("passes = %zu\n", passes
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgY21wKGludCB4LCBpbnQgeSkgLy8gY29tcGFyZSB4IGFuZCB5CnsKICAgIHJldHVybiB4ID4geTsgLy8gMSBpZiB4ID4geSwgMCBvdGhlcndpc2UKfQoKdm9pZCBzd2FwKGludCAqeCwgaW50ICp5KQp7CiAgICBpbnQgdG1wID0gKng7CgogICAgKnggPSAqeTsKICAgICp5ID0gdG1wOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgYVtdID0gezMsIDEsIDQsIDEsIDUsIDksIDIsIDYsIDV9OwogICAgc2l6ZV90IG4gPSBzaXplb2YgYSAvIHNpemVvZiBhWzBdOyAgICAgCiAgICBzaXplX3QgY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAKICAgIHNpemVfdCBwYXNzZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgIAoKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgewogICAgICAgIGludCBzd2FwcGVkID0gMDsgICAgICAgICAgICAgICAgICAKICAgICAgICArK3Bhc3NlczsgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBuIC0gMSAtIGk7ICsraikgewogICAgICAgICAgICBpZiAoY21wKGFbal0sIGFbaiArIDFdKSkgewogICAgICAgICAgICAgICAgc3dhcCgmYVtqXSwgJmFbaiArIDFdKTsKICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICAgICBzd2FwcGVkID0gMTsgICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghc3dhcHBlZCkgYnJlYWs7ICAgICAgICAgICAgICAKICAgIH0KCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIHByaW50ZigiJWQgIiwgYVtpXSk7CiAgICB9CiAgICBwcmludGYoIlxuIik7CiAgICBwcmludGYoInN3YXAgY291bnQgPSAlenVcbiIsIGNvdW50KTsKICAgIHByaW50ZigicGFzc2VzICAgICA9ICV6dVxuIiwgcGFzc2VzKTsKCiAgICByZXR1cm4gMDsKfQ==