fork download
  1.  
  2. #include <stdio.h>
  3. int* array_remove(int* fa, int* la, int (*pfun)(int));
  4. void array_sort(int* fa, int* la, int (*pfun)(int, int));
  5. void array_println(FILE* _out, const int* fa, const int* la);
  6.  
  7. int compare_d(int n) { return (n < 0); }
  8. int compare_s(int a, int b) { return (a < b); }
  9.  
  10. int main(void){
  11. int* e;
  12. int a[] = { 9, -1, 5, 8, -2, -3, 7, -5, -9, -3, -2, 1, -5 };
  13. size_t n = sizeof(a)/sizeof(a[0]);
  14.  
  15. array_println(stdout, a, a + n);
  16.  
  17. e = array_remove(a, a + n, &compare_d);
  18. array_println(stdout, a, e);
  19.  
  20. array_sort(a, e, &compare_s);
  21. array_println(stdout, a, e);
  22. return 0;
  23. }
  24.  
  25. //удаление
  26. int* array_remove(int* fa, int* la, int (*pfun)(int)){
  27. int* p;
  28. while((fa != la) && !(*pfun)(*fa))
  29. ++fa;
  30.  
  31. for(p = fa; fa != la; *fa = *p){
  32. if((*pfun)(*p))
  33. --la;
  34. else
  35. ++fa;
  36. ++p;
  37. }
  38. return la;
  39. }
  40.  
  41. //сортировка вставками
  42. void array_sort(int* fa, int* la, int (*pfun)(int, int)){
  43. int* p, k, *o = fa;
  44. for(++fa; fa < la; ++fa){
  45. k = *fa;
  46. for(p = fa - 1; (p >= o) && (*pfun)(k, *p); --p)
  47. *(p + 1) = *p;
  48. *(p + 1) = k;
  49. }
  50. }
  51.  
  52. //печать
  53. void array_println(FILE* _out, const int* fa, const int* la){
  54. while(fa != la)
  55. fprintf(_out, "%d ", *fa++);
  56. fputc('\n', _out);
  57. }
Success #stdin #stdout 0s 2156KB
stdin
Standard input is empty
stdout
9 -1 5 8 -2 -3 7 -5 -9 -3 -2 1 -5 
9 5 8 7 1 
1 5 7 8 9