fork download
  1. #include <iostream>
  2.  
  3.  
  4. template<typename T, typename Cmp>
  5. T* find_part(T* f, T* l, Cmp cmp){
  6. T* p;
  7. while((f != l) && cmp(*f))
  8. ++f;
  9.  
  10. for(p = f; f != l; ++f){
  11. if(cmp(*f)){
  12. for(T* i = f; i > p; --i)
  13. std::swap(*i, *(i - 1));
  14. ++p;
  15. }
  16. }
  17. return p;
  18. }
  19.  
  20.  
  21. struct intcmp {
  22. bool operator () (int n) const{ return (n < 0); }
  23. };
  24.  
  25.  
  26.  
  27. int main(void){
  28. int A[] = { -1, 1, -2, 2, 3, -3, 4, -4, 5, -5 };
  29. size_t N = sizeof(A)/sizeof(A[0]);
  30.  
  31. const int* m = find_part(A, A + N, intcmp());
  32.  
  33. //можно вывести только отрицательные
  34. for(const int* i = &A[0]; i != m; ++i)
  35. std::cout << *i << ' ';
  36. std::cout << std::endl;
  37.  
  38. //вывести весь массив
  39. for(const int* p = &A[0]; p != &A[N]; ++p)
  40. std::cout << *p << ' ';
  41. return 0;
  42. }
  43.  
  44.  
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
-1 -2 -3 -4 -5 
-1 -2 -3 -4 -5 1 2 3 4 5