Big-O notation conveys us information about how a given algorithm run time scales with respect to a given input size. However, one has to be careful on the interpretation of this scaling (limiting) behaviour. First of all, when we talk about
O(N^2), it doesn't mean that it is valid for any input size. Let's illustrate that asymptotic behaviour shown by
big-O notation could be “misleading” for “smaller” input. Let’s take
number of operation
T(N)=4 N^2 – 2N.
T’(4) must be 4 times of
T’(2) if
we consider as
T’(N) = N^2. But if we use
T(N) instead,
T(4) would be
4.666667 times of
T(2).
A good example in this direction is
N-body force calculations (or
here). An
O(N^2) algorithm performs better compare
to
O(NlogN) ones up to a break-even point even 50K particles. This is a
good paper explaining this;
Pringle, Gavin J. "Comparison of an O (N) and an O (N log N) N-body solver."