#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 );
std::cout << "swap(" << a.x << "," << b.x << ")\n";
swapCount++;
}
};
int main() {
std::vector<X> vec;
for ( int i = 0; i < 100; i++ )
{
vec.push_back( X( i ) );
};
std::cout << "swapCount=" << swapCount << "\n";
std::sort( vec.begin(), vec.end(),
[] ( const X &a, const X &b ) -> bool { return (a.x) < (b.x); } );
std::cout << "swapCount=" << swapCount << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKaW50IHN3YXBDb3VudCA9IDA7CgpjbGFzcyBYCnsKcHVibGljOgoJaW50IHg7CgkKCVgoIGludCB2YWwgKTogeCggdmFsICkge307CgkKCWZyaWVuZCB2b2lkIHN3YXAoIFggJmEsIFggJmIgKQoJewoJCXVzaW5nIHN0ZDo6c3dhcDsKCQlzd2FwKCBhLngsIGIueCApOwoJCXN0ZDo6Y291dCA8PCAic3dhcCgiIDw8IGEueCA8PCAiLCIgPDwgYi54IDw8ICIpXG4iOwoJCXN3YXBDb3VudCsrOwoJfQp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3RvcjxYPiB2ZWM7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKyApCgl7CgkJdmVjLnB1c2hfYmFjayggWCggaSApICk7Cgl9OwoJc3RkOjpjb3V0IDw8ICJzd2FwQ291bnQ9IiA8PCBzd2FwQ291bnQgPDwgIlxuIjsKCQoJc3RkOjpzb3J0KCB2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLCAKCQlbXSAoIGNvbnN0IFggJmEsIGNvbnN0IFggJmIgKSAtPiBib29sIHsgcmV0dXJuIChhLngpIDwgKGIueCk7IH0gKTsKCXN0ZDo6Y291dCA8PCAic3dhcENvdW50PSIgPDwgc3dhcENvdW50IDw8ICJcbiI7CgkKCXJldHVybiAwOwp9
swapCount=0
swap(50,0)
swap(75,51)
swap(88,76)
swap(52,75)
swap(51,75)
swap(64,53)
swap(1,50)
swap(0,50)
swap(26,2)
swap(39,27)
swap(3,26)
swap(2,26)
swap(15,4)
swapCount=13