bool first_goes_to_left_of(int first, int second) {
if (first %2 == 0) { //if first is even
if (second %2 == 0) //and second is even
return first < second; //sort by increasing order
else //and second is odd
return true; //first goes to left
} else { //if first is odd
if (second %2 == 0) //and second is even
return false; //second goes to left
else //and second is odd
return second < first; //sort by decreasing order
}
}
#include <algorithm>
#include <iostream>
#include <iterator>
int main() {
int a[10]={4,6,9,1,2,3,7,5,8,0};
std::sort(a, a+10, first_goes_to_left_of);
std::copy(a, a+10, std::ostream_iterator<int>(std::cout, " "));
}
Ym9vbCBmaXJzdF9nb2VzX3RvX2xlZnRfb2YoaW50IGZpcnN0LCBpbnQgc2Vjb25kKSB7CiAgICBpZiAoZmlyc3QgJTIgPT0gMCkgeyAvL2lmIGZpcnN0IGlzIGV2ZW4KICAgICAgICBpZiAoc2Vjb25kICUyID09IDApIC8vYW5kIHNlY29uZCBpcyBldmVuCiAgICAgICAgICAgIHJldHVybiBmaXJzdCA8IHNlY29uZDsgLy9zb3J0IGJ5IGluY3JlYXNpbmcgb3JkZXIKICAgICAgICBlbHNlICAvL2FuZCBzZWNvbmQgaXMgb2RkCiAgICAgICAgICAgIHJldHVybiB0cnVlOyAvL2ZpcnN0IGdvZXMgdG8gbGVmdAogICAgfSBlbHNlIHsgLy9pZiBmaXJzdCBpcyBvZGQKICAgICAgICBpZiAoc2Vjb25kICUyID09IDApIC8vYW5kIHNlY29uZCBpcyBldmVuCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy9zZWNvbmQgZ29lcyB0byBsZWZ0CiAgICAgICAgZWxzZSAgLy9hbmQgc2Vjb25kIGlzIG9kZAogICAgICAgICAgICByZXR1cm4gc2Vjb25kIDwgZmlyc3Q7IC8vc29ydCBieSBkZWNyZWFzaW5nIG9yZGVyCiAgICB9Cn0KCiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgoKaW50IG1haW4oKSB7CiAgICBpbnQgYVsxMF09ezQsNiw5LDEsMiwzLDcsNSw4LDB9OwogICAgc3RkOjpzb3J0KGEsIGErMTAsIGZpcnN0X2dvZXNfdG9fbGVmdF9vZik7CiAgICBzdGQ6OmNvcHkoYSwgYSsxMCwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4oc3RkOjpjb3V0LCAiICIpKTsKfQ==