#include <iostream>
#include <iterator>
template<typename T, typename Cmp>
void ssort(T* f, T* l, Cmp cmp){
T* p, *i, t;
for(;f != l; ++f){
p = f;
for(i = f + 1; i < l; ++i){
if(cmp(*i, *p))
p = i;
}
if(p != f){
t = *p;
*p = *f;
*f = t;
}
}
}
int main(void){
int arr[] = { 5, 7, 3, 9, 4, 1, 8, 6, 2 };
int num = sizeof(arr)/sizeof(arr[0]);
std::ostream_iterator<int> lp(std::cout, " ");
std::copy(arr, arr + num, lp);
std::cout << std::endl;
ssort(arr, arr + num, [] (const int& a, const int& b){
return (a > b);
});
std::copy(arr, arr + num, lp);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CgoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ21wPgp2b2lkIHNzb3J0KFQqIGYsIFQqIGwsIENtcCBjbXApewoJVCogcCwgKmksIHQ7Cglmb3IoO2YgIT0gbDsgKytmKXsKCQlwID0gZjsKCQlmb3IoaSA9IGYgKyAxOyBpIDwgbDsgKytpKXsKCQkJaWYoY21wKCppLCAqcCkpCgkJCQlwID0gaTsKCQl9CgoJCWlmKHAgIT0gZil7CgkJCXQgID0gKnA7CgkJCSpwID0gKmY7CgkJCSpmID0gdDsKCQl9Cgl9Cn0KCgoKaW50IG1haW4odm9pZCl7CglpbnQgYXJyW10gPSB7IDUsIDcsIDMsIDksIDQsIDEsIDgsIDYsIDIgfTsgCglpbnQgbnVtID0gc2l6ZW9mKGFycikvc2l6ZW9mKGFyclswXSk7CgoJc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4gbHAoc3RkOjpjb3V0LCAiICIpOwoJc3RkOjpjb3B5KGFyciwgYXJyICsgbnVtLCBscCk7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKCXNzb3J0KGFyciwgYXJyICsgbnVtLCBbXSAoY29uc3QgaW50JiBhLCBjb25zdCBpbnQmIGIpewoJCXJldHVybiAoYSA+IGIpOwkKCX0pOwoKCXN0ZDo6Y29weShhcnIsIGFyciArIG51bSwgbHApOwoJcmV0dXJuIDA7Cn0=