#include <iostream>
#include <vector>
#include <algorithm>
int swapCount = 0;
class X
{
public:
int x;
X( int val ): x( val ) {};
friend void swap( X &a, X &b )
{
using std::swap;
swap( a.x, b.x );
swapCount++;
std::cout << "a.x = " << a.x << ", b.x = " << b.x << std::endl;
}
};
void f(int n) {
std::vector<X> vec;
for ( int i = 0; i < n; i++ )
vec.push_back( X( i ) );
swapCount = 0;
std::stable_sort( vec.begin(), vec.end(),
[] ( const X &a, const X &b ) -> bool { return (a.x) < (b.x); } );
std::cout << n << ") " << "swapCount=" << swapCount << "\n";
}
int main() {
for(int n=1; n<100; ++n) f(n);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKaW50IHN3YXBDb3VudCA9IDA7CgpjbGFzcyBYCnsKcHVibGljOgoJaW50IHg7CgkKCVgoIGludCB2YWwgKTogeCggdmFsICkge307CgkKCWZyaWVuZCB2b2lkIHN3YXAoIFggJmEsIFggJmIgKQoJewoJCXVzaW5nIHN0ZDo6c3dhcDsKCQlzd2FwKCBhLngsIGIueCApOwoJCXN3YXBDb3VudCsrOwoJCXN0ZDo6Y291dCA8PCAiYS54ID0gIiA8PCBhLnggPDwgIiwgYi54ID0gIiA8PCBiLnggPDwgc3RkOjplbmRsOwoJfQp9OwoKdm9pZCBmKGludCBuKSB7CglzdGQ6OnZlY3RvcjxYPiB2ZWM7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBuOyBpKysgKSAKCQl2ZWMucHVzaF9iYWNrKCBYKCBpICkgKTsKCglzd2FwQ291bnQgPSAwOwoJc3RkOjpzdGFibGVfc29ydCggdmVjLmJlZ2luKCksIHZlYy5lbmQoKSwgCgkJW10gKCBjb25zdCBYICZhLCBjb25zdCBYICZiICkgLT4gYm9vbCB7IHJldHVybiAoYS54KSA8IChiLngpOyB9ICk7CglzdGQ6OmNvdXQgPDwgbiA8PCAiKSAiIDw8ICJzd2FwQ291bnQ9IiA8PCBzd2FwQ291bnQgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7Cglmb3IoaW50IG49MTsgbjwxMDA7ICsrbikgZihuKTsKCXJldHVybiAwOwp9