#include <iostream>
template<typename T, typename Cmp>
T* find_part(T* f, T* l, Cmp cmp){
T* p;
while((f != l) && cmp(*f))
++f;
for(p = f; f != l; ++f){
if(cmp(*f)){
for(T* i = f; i > p; --i)
std::swap(*i, *(i - 1));
++p;
}
}
return p;
}
struct intcmp {
bool operator () (int n) const{ return (n < 0); }
};
int main(void){
int A[] = { -1, 1, -2, 2, 3, -3, 4, -4, 5, -5 };
size_t N = sizeof(A)/sizeof(A[0]);
const int* m = find_part(A, A + N, intcmp());
//можно вывести только отрицательные
for(const int* i = &A[0]; i != m; ++i)
std::cout << *i << ' ';
std::cout << std::endl;
//вывести весь массив
for(const int* p = &A[0]; p != &A[N]; ++p)
std::cout << *p << ' ';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENtcD4KVCogZmluZF9wYXJ0KFQqIGYsIFQqIGwsIENtcCBjbXApewoJVCogcDsKCXdoaWxlKChmICE9IGwpICYmIGNtcCgqZikpCgkJKytmOwoKCWZvcihwID0gZjsgZiAhPSBsOyArK2YpewoJCWlmKGNtcCgqZikpewoJCQlmb3IoVCogaSA9IGY7IGkgPiBwOyAtLWkpCgkJCQlzdGQ6OnN3YXAoKmksICooaSAtIDEpKTsKCQkJKytwOwoJCX0KCX0KCXJldHVybiBwOwp9CgoKc3RydWN0IGludGNtcCB7Cglib29sIG9wZXJhdG9yICgpIChpbnQgbikgY29uc3R7IHJldHVybiAobiA8IDApOyB9Cn07CgoKCmludCBtYWluKHZvaWQpewoJaW50ICAgQVtdID0geyAtMSwgMSwgLTIsIDIsIDMsIC0zLCA0LCAtNCwgNSwgLTUgfTsKCXNpemVfdCBOICA9IHNpemVvZihBKS9zaXplb2YoQVswXSk7CgoJY29uc3QgaW50KiBtID0gZmluZF9wYXJ0KEEsIEEgKyBOLCBpbnRjbXAoKSk7CgkKCS8v0LzQvtC20L3QviDQstGL0LLQtdGB0YLQuCDRgtC+0LvRjNC60L4g0L7RgtGA0LjRhtCw0YLQtdC70YzQvdGL0LUKCWZvcihjb25zdCBpbnQqIGkgPSAmQVswXTsgaSAhPSBtOyArK2kpCgkJc3RkOjpjb3V0IDw8ICppIDw8ICcgJzsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgoJLy/QstGL0LLQtdGB0YLQuCDQstC10YHRjCDQvNCw0YHRgdC40LIKCWZvcihjb25zdCBpbnQqIHAgPSAmQVswXTsgcCAhPSAmQVtOXTsgKytwKQoJCXN0ZDo6Y291dCA8PCAqcCA8PCAnICc7CglyZXR1cm4gMDsKfQoK