\documentclass{article}
\usepackage{algorithm}
\begin{document}
\setcounter{section}{54}
\section{A section with no label}
\begin{algorithm}
\label{myalg}
\caption{An algorithm with the label `myalg'.}
\end{algorithm}
Reference to myalg: \ref{myalg}.
\end{document}
With this code, the reference givens 55 (the section number); if I move the label after the caption command, I get the correct reference (1).
Why should this be the case? I find it confusing: when thinking about an algorithm as an environment, you expect to be able to label it right after you began it. At the very least I would expect some kind of error or "??" to appear, rather than the previous environment or reference-able entity being used.