The benchmarks and their graphical representation correspond well to the expected results. Without doing any deep analysis of the data it is clear from the graph that - with the exception of the first part of the Algo-1 results - represent instances of the corresponding O(.) functions.
The oddities in the Algo-3 graph can be explained by the fact that when a method has not been run before, it has not been Just-In-Time compiled and thus it takes a few runs before it performs with optimal speed. For the subsequent benchmarks the method seems to have been JIT compiled and thus performs better than for n = 50.
When n is doubled, the time develops as follows: \[\begin{aligned} Algo1, O(n^3): (2n)^3 & = 8n^3, \\ Algo2, O(n^2): (2n)^2 & = 4n^2, \\ Algo3, O(n^1): (2n)^1 & = 2n\end{aligned}\]
For each time the size of the problem doubles, it takes \(8 = 2^3\) times longer for Algo1 to finish.
For Algo2, it takes \(4 = 2^2\) times longer, and \(2 = 2^1\) times longer for Algo1.