#include <stdio.h>
int* array_remove(int* fa, int* la, int (*pfun)(int));
void array_sort(int* fa, int* la, int (*pfun)(int, int));
void array_println(FILE* _out, const int* fa, const int* la);
int compare_d(int n) { return (n < 0); }
int compare_s(int a, int b) { return (a < b); }
int main(void){
int* e;
int a[] = { 9, -1, 5, 8, -2, -3, 7, -5, -9, -3, -2, 1, -5 };
size_t n = sizeof(a)/sizeof(a[0]);
array_println(stdout, a, a + n);
e = array_remove(a, a + n, &compare_d);
array_println(stdout, a, e);
array_sort(a, e, &compare_s);
array_println(stdout, a, e);
return 0;
}
//удаление
int* array_remove(int* fa, int* la, int (*pfun)(int)){
int* p;
while((fa != la) && !(*pfun)(*fa))
++fa;
for(p = fa; fa != la; *fa = *p){
if((*pfun)(*p))
--la;
else
++fa;
++p;
}
return la;
}
//сортировка вставками
void array_sort(int* fa, int* la, int (*pfun)(int, int)){
int* p, k, *o = fa;
for(++fa; fa < la; ++fa){
k = *fa;
for(p = fa - 1; (p >= o) && (*pfun)(k, *p); --p)
*(p + 1) = *p;
*(p + 1) = k;
}
}
//печать
void array_println(FILE* _out, const int* fa, const int* la){
while(fa != la)
}
CiNpbmNsdWRlIDxzdGRpby5oPgppbnQqIGFycmF5X3JlbW92ZShpbnQqIGZhLCBpbnQqIGxhLCBpbnQgKCpwZnVuKShpbnQpKTsKdm9pZCBhcnJheV9zb3J0KGludCogZmEsIGludCogbGEsIGludCAoKnBmdW4pKGludCwgaW50KSk7CnZvaWQgYXJyYXlfcHJpbnRsbihGSUxFKiBfb3V0LCBjb25zdCBpbnQqIGZhLCBjb25zdCBpbnQqIGxhKTsKCmludCBjb21wYXJlX2QoaW50IG4pICAgICAgICB7IHJldHVybiAobiA8IDApOyB9CmludCBjb21wYXJlX3MoaW50IGEsIGludCBiKSB7IHJldHVybiAoYSA8IGIpOyB9CgppbnQgbWFpbih2b2lkKXsKCWludCogZTsKCWludCAgYVtdID0geyA5LCAtMSwgNSwgOCwgLTIsIC0zLCA3LCAtNSwgLTksIC0zLCAtMiwgMSwgLTUgfTsKCXNpemVfdCBuID0gc2l6ZW9mKGEpL3NpemVvZihhWzBdKTsKCglhcnJheV9wcmludGxuKHN0ZG91dCwgYSwgYSArIG4pOwoKCWUgPSBhcnJheV9yZW1vdmUoYSwgYSArIG4sICZjb21wYXJlX2QpOwoJYXJyYXlfcHJpbnRsbihzdGRvdXQsIGEsIGUpOwoKCWFycmF5X3NvcnQoYSwgZSwgJmNvbXBhcmVfcyk7CglhcnJheV9wcmludGxuKHN0ZG91dCwgYSwgZSk7CglyZXR1cm4gMDsKfQoKLy/Rg9C00LDQu9C10L3QuNC1CmludCogYXJyYXlfcmVtb3ZlKGludCogZmEsIGludCogbGEsIGludCAoKnBmdW4pKGludCkpewoJaW50KiBwOwoJd2hpbGUoKGZhICE9IGxhKSAmJiAhKCpwZnVuKSgqZmEpKQoJCSsrZmE7CgkKCWZvcihwID0gZmE7IGZhICE9IGxhOyAqZmEgPSAqcCl7CgkJaWYoKCpwZnVuKSgqcCkpCgkJCS0tbGE7CgkJZWxzZQoJCQkrK2ZhOwoJCSsrcDsKCX0KCXJldHVybiBsYTsKfQoKLy/RgdC+0YDRgtC40YDQvtCy0LrQsCDQstGB0YLQsNCy0LrQsNC80LgKdm9pZCBhcnJheV9zb3J0KGludCogZmEsIGludCogbGEsIGludCAoKnBmdW4pKGludCwgaW50KSl7CglpbnQqIHAsIGssICpvID0gZmE7Cglmb3IoKytmYTsgZmEgPCBsYTsgKytmYSl7CgkJayA9ICpmYTsKCQlmb3IocCA9IGZhIC0gMTsgKHAgPj0gbykgJiYgKCpwZnVuKShrLCAqcCk7IC0tcCkKCQkJKihwICsgMSkgPSAqcDsKCQkqKHAgKyAxKSA9IGs7Cgl9Cn0KCi8v0L/QtdGH0LDRgtGMCnZvaWQgYXJyYXlfcHJpbnRsbihGSUxFKiBfb3V0LCBjb25zdCBpbnQqIGZhLCBjb25zdCBpbnQqIGxhKXsKCXdoaWxlKGZhICE9IGxhKQoJCWZwcmludGYoX291dCwgIiVkICIsICpmYSsrKTsKCWZwdXRjKCdcbicsIF9vdXQpOwp9