#include <stdio.h>
#include <stdlib.h>
int* array_remove(int* fa, int* la, int v);
void array_println(FILE* _out, const int* fa, const int* la);
int compare(const void* a, const void* b){
return *(int*)b - *(int*)a;
}
int main(void){
int* e;
int a[] = { 0, 5, 0, 0, 1, 0, -7, 0, 0, 0, 0, 8, 0, -3, 0, 2, 0, 9, 0 };
size_t n = sizeof(a)/sizeof(a[0]);
array_println(stdout, a, a + n);
e = array_remove(a, a + n, 0);
array_println(stdout, a, e);
n = (size_t)(e - a);
qsort(a
, n
, sizeof(a
[0]), &compare
); array_println(stdout, a, e);
return 0;
}
int* array_remove(int* fa, int* la, int v){
int* p;
while((fa != la) && (*fa != v))
++fa;
for(p = fa; fa != la; *fa = *(++p)){
if(*fa == v)
--la;
else
++fa;
}
return la;
}
void array_println(FILE* _out, const int* fa, const int* la){
while(fa != la)
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CmludCogYXJyYXlfcmVtb3ZlKGludCogZmEsIGludCogbGEsIGludCB2KTsKdm9pZCBhcnJheV9wcmludGxuKEZJTEUqIF9vdXQsIGNvbnN0IGludCogZmEsIGNvbnN0IGludCogbGEpOwoKaW50IGNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYil7CglyZXR1cm4gKihpbnQqKWIgLSAqKGludCopYTsKfQoKaW50IG1haW4odm9pZCl7CglpbnQqICAgZTsKCWludCAgICBhW10gPSB7IDAsIDUsIDAsIDAsIDEsIDAsIC03LCAwLCAwLCAwLCAwLCA4LCAwLCAtMywgMCwgMiwgMCwgOSwgMCB9OwoJc2l6ZV90IG4gICA9IHNpemVvZihhKS9zaXplb2YoYVswXSk7CgoJYXJyYXlfcHJpbnRsbihzdGRvdXQsIGEsIGEgKyBuKTsKCQoJZSA9IGFycmF5X3JlbW92ZShhLCBhICsgbiwgMCk7CglhcnJheV9wcmludGxuKHN0ZG91dCwgYSwgZSk7CgoJbiA9IChzaXplX3QpKGUgLSBhKTsKCXFzb3J0KGEsIG4sIHNpemVvZihhWzBdKSwgJmNvbXBhcmUpOwoJYXJyYXlfcHJpbnRsbihzdGRvdXQsIGEsIGUpOwoJcmV0dXJuIDA7Cn0KCmludCogYXJyYXlfcmVtb3ZlKGludCogZmEsIGludCogbGEsIGludCB2KXsKCWludCogcDsKCXdoaWxlKChmYSAhPSBsYSkgJiYgKCpmYSAhPSB2KSkKCQkrK2ZhOwoKCWZvcihwID0gZmE7IGZhICE9IGxhOyAqZmEgPSAqKCsrcCkpewoJCWlmKCpmYSA9PSB2KQoJCQktLWxhOwoJCWVsc2UKCQkJKytmYTsKCX0KCXJldHVybiBsYTsKfQoKdm9pZCBhcnJheV9wcmludGxuKEZJTEUqIF9vdXQsIGNvbnN0IGludCogZmEsIGNvbnN0IGludCogbGEpewoJd2hpbGUoZmEgIT0gbGEpCgkJZnByaW50Zihfb3V0LCAiJWQgIiwgKmZhKyspOwoJZnB1dGMoJ1xuJywgX291dCk7Cn0=