C++11C++, (63 6060 57 bytes)
void s(int*f,int*e){for(int c=*f;++f!=e;c=*f)*f+=c=e;c=*f+=c/ *f**f;*f**f);} Works inplace given a range [first, last). Originally written as template variant, but that was longer:
template <classtemplate<class T>void s(T f,T e){for(auto c=*f;++f!=e;c=*f)*f+=c=e;c=*f+=c/ *f**f;*f**f);} Extended version
template <class ForwardIterator> void sort(ForwardIterator first, ForwardIterator last){ auto previous = *first; for(++first; first != last; ++first){ auto & current = *first; current += current * (current / previous); previous = current; } }